- 论坛徽章:
- 0
|
int32_t nRetVal = 0;
bool bRst = true;
int32_t localSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(localSocket < 0)
{
snprintf(m_szLastErr,sizeof(m_szLastErr),"make srvfd failed,errno:[%d]\n",errno);
return (-1);
}
struct sockaddr_in srvAddr;
srvAddr.sin_family = AF_INET;
srvAddr.sin_addr.s_addr = inet_addr(m_strSrvIP.c_str());
srvAddr.sin_port = htons(m_uSrvPort);
nRetVal = connect(localSocket,(struct sockaddr*)&srvAddr,sizeof(sockaddr_in));
if(nRetVal != 0)
{
snprintf(m_szLastErr,sizeof(m_szLastErr),"connect failed,errno:[%d]\n",errno);
return (-1);
}
//设置IO超时,要在connect之后
struct timeval stTimeO;
stTimeO.tv_sec = m_nTimeOSec;
stTimeO.tv_usec = m_nTimeOUSec;
if((nRetVal = setsockopt(localSocket,SOL_SOCKET,SO_SNDTIMEO,&stTimeO,sizeof(timeval))) < 0){bRst = false;}
if((nRetVal = setsockopt(localSocket,SOL_SOCKET,SO_RCVTIMEO,&stTimeO,sizeof(timeval))) < 0){bRst = false;}
if(bRst == false)
{
snprintf(m_szLastErr,sizeof(m_szLastErr),"setsockopt failed,errno:[%d]\n",errno);
close(localSocket);
return (-1);
}
int32_t nSend = send(localSocket,pSendBuf,uSendbufLen,0);
if(nSend < 0)
{
snprintf(m_szLastErr,sizeof(m_szLastErr),"send func failed,errno:[%d]\n",errno);
close(localSocket);
return (-1);
}
if( nSend != (int32_t)uSendbufLen )
{
snprintf(m_szLastErr,sizeof(m_szLastErr),"send bytes error,sent bytes len:[%d],real len:[%u]\n",nSend,uSendbufLen);
close(localSocket);
return (-1);
}
int32_t nRecv = recv(localSocket,pRecvBuf,uRecvbufLen,0);
if(nRecv < 0)
{
snprintf(m_szLastErr,sizeof(m_szLastErr),"recv func faild,errno:[%d]\n",errno);
close(localSocket);
return (-1);
} |
|