读书人

怎么判断socket是否有效

发布时间: 2013-09-26 10:32:35 作者: rapoo

如何判断socket是否有效
RT,但是不想丢失任何数据,有的人说用recv可以搞定,可是那样的话可能会recv掉有用数据,好像select可以解决这个问题,可是不知道怎么用,怎么办,如何才能判断一个socket(即int)是否有效呢,前提是不要丢数据,越简单越好,当然可靠性要保障 socket select 网络编程 高级编程 是否有效
[解决办法]
我写个大概吧!

select(maxfd+1,&allset,NULL,NULL,NULL);

if(FD_ISSET(sockfd,&allset))
{
//sockfd有效则执行的代码
}else{
//否则无效执行的代码
}




[解决办法]


fd_set fd_r,fd_w;

struct timeval tvv;

while(1)
{

FD_ZERO(&fd_r);
FD_ZERO(&fd_w);
FD_SET(lisSock, &fd_r);
FD_SET(lisSock, &fd_w);
tvv.tv_sec = 2;
tvv.tv_usec = 0;

Ret = select(lisSock + 1, &fd_r, &fd_w, NULL, &tvv);

printf("\n [%s]-[%d]: Ret = %d \n", __func__, __LINE__, Ret);

acpSock = accept( lisSock, (struct sockaddr *)&clieaddr_in, &socklen);
if( acpSock < 0)
{
perror("accept");
sleep(2);
continue;
}

m_clientNum ++;


pthread_t pthreadId;
pthreadparam *pThreadParam = new pthreadparam;
pThreadParam->sockFd = acpSock;
pThreadParam->ClientNO = m_clientNum;
pthread_create( &pthreadId, NULL, &clientfuncthread, pThreadParam);


printf("\n\n there have %d cliens connect success!\n\n", m_clientNum);

}



好早之前写的,select函数只是轮询已有的套接字 是否有准备好的 读 ,写 和 异常 三种状态,
[解决办法]
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html

[解决办法]
我们生成的socket基本都是阻塞的,如果没有连接成功,recv会一直阻塞,select只是告诉你有没有别人联系自己,返回可操作的个数。。。

读书人网 >C++

热点推荐