- 论坛徽章:
- 0
|
int connectSocket(socket_t tsocket, const char * ip, short port)
{
struct sockaddr_in addr;
memset(&addr, 0, sizeof(struct sockaddr_in));
//新添加 解决对方服务器没有开机阻塞问题aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
int flags;
int retcode;
fd_set rdset;
struct timeval tv;
int ret;
//新添加 解决对方服务器没有开机阻塞问题aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
if(tsocket > 0) //连接目标机
{
//下面获取套接字的标志
if ((flags = fcntl(tsocket, F_GETFL)) < 0)
{
etsDebug(0, \"获取套接字的标志错误[%d]\", flags);
return -1;
}
//下面设置套接字为非阻塞
if (fcntl(tsocket, F_SETFL, flags | O_NONBLOCK) < 0)
{
etsDebug(0, \"设置套接字为非阻塞错误[%d]\", flags);
return -1;
}
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
if(!ip)
{
addr.sin_addr.s_addr = 0;
}
else
{
addr.sin_addr.s_addr = inet_addr(ip);
//memcpy(&addr.sin_addr, ip, sizeof(ip));
}
ret = connect(tsocket, (const struct sockaddr*)&addr, sizeof(struct sockaddr));
}
连接远程ip 在非阻塞模式下返回值总是为-1。但在阻塞模式下能连接成功 。 |
|