📄 tcpsocket.cpp
字号:
/************************************************************** * TcpSocket.cpp : implementation file * Copyright 2004-2005 TianMuLingHang * All rights reserved. * Author: Zeng Wenchuan * Date: Jan 9, 2005 * Modify: * Date:
* Email: zeng_aven@163.com
* Site: http://zeng_aven.go.nease.net/ *************************************************************/
#include "TcpSocket.h"
CTcpSocket::CTcpSocket() : m_bConnect(false)
{
}
CTcpSocket::~CTcpSocket()
{
}
bool CTcpSocket::Create(int port)
{
if (CSocketBase::Create(AF_INET, SOCK_STREAM))
return Bind(port);
return false;
}
bool CTcpSocket::Create()
{
if (CSocketBase::Create(AF_INET, SOCK_STREAM))
return Bind();
return false;
}
CTcpSocket *CTcpSocket::Accept()
{
CTcpSocket *pSocket = new CTcpSocket;
if (!Accept(pSocket)) {
delete pSocket;
pSocket = NULL;
return NULL;
}
return pSocket;
}
bool CTcpSocket::Accept(CTcpSocket *pSocket)
{
assert(pSocket);
//对方地址
sockaddr_in addr;
int addr_len = sizeof(addr);
int sockfd = accept(GetSocketId(), (sockaddr* )GetSocketAddr(), (socklen_t *)&addr_len);
if (sockfd == SOCKET_ERROR)
return false;
pSocket->Attach(sockfd);
pSocket->SetConnected(addr);
pSocket->AddAcceptInList();
return true;
}
bool CTcpSocket::Connect(const string sAddr, int port)
{
struct sockaddr_in addr; //目的地址
addr.sin_family = AF_INET;
addr.sin_port = htons(0);
addr.sin_addr.s_addr = inet_addr(INADDR_ANY);
bzero(&(addr.sin_zero), 8);
return connect(GetSocketId(), (struct sockaddr *)&addr, sizeof(struct sockaddr))
== 0;
}
int CTcpSocket::Send(const void *msg, int len)
{
if (len <= 0)
len = MAXSEND;
return send(GetSocketId(), msg, len, 0);
}
int CTcpSocket::Receive(void *buf, int len)
{
if (len <= 0)
len = MAXRECV;
return recv(GetSocketId(), buf, len, 0);
}
bool CTcpSocket::InitSvrSockets(int port, int nThreadNum/*=0*/)
{
if (!Create(port))
return false;
if (!Listen())
return false;
int n = 1;
setsockopt(GetSocketId(), SOL_SOCKET, SO_REUSEADDR, &n, sizeof(int));
if (!nThreadNum)
return true;
return InitThreadPool(nThreadNum);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -