#include
by
s5un
-
C/C++
-
2005-11-18 15:58:52 阅读(1741) 回复(2)
void* CMySocket::PeekMessage(void* lpParameter) { CMySocket* pSocket = (CMySocket* )lpParameter; int usersock_fd = pSocket->GetSocketfd(); struct timeval tv; // tv.tv_sec = 0; // tv.tv_usec = 5000; fd_set rdfdset, exfdset; while(1) { FD_ZERO(&rdfdset); FD_ZERO(&exfdset); FD_SET(usersock_fd, &rdfdset); FD_SET(usersock_fd, &exfdset); if(select(usersock_fd+1, &rdfdset, NULL, &exf...
看 使用 select 设计超时 connect 函数的问题(linux 上连接 127.0.0.1 任何端口总是成功 http://community.csdn.net/Expert/topic/5617/5617988.xml?temp=.6573145
我们用的开发平台是基于linux 2.4 内核代码上的,上层的应用程序都是通过socket进行通信的(包括进程间通信和网络通信),socket都设置位nonblock,但是最近经过测试发现有两种情况下socket的系统调用会一直阻塞不能返回: 1,select的调用,这种情况下的socket是作为服务端,且已经建立了连接,我们对select设置了超时时间,但有时候可能是由于调用select太频繁(服务端向客户端发送大数据,服务端把大数据分片发送,select就是等...
关于select函数的用法不是很清楚,尤其是什么时候套接口可读?可写?
以下是一段服务器代码,想要通过客户端的connect使得sockfd可读,但是没有成功:)
那位高手帮忙解决一下:)
server 端:
#include
我想实现非阻塞Socket通信,但是select却总返回0,不知道到底是哪个环节写错了,请高手指教
下面是部分代码,前面已经实现了socket、bind和listen:
TOut.tv_sec = 2;
TOut.tv_usec = 2;
//设置监听端口
FD_ZERO(&ReadFds);
FD_ZERO(&ErrFds);
FD_SET(g_iSockfd, &ReadFds);
iReturn = select(g_iSockfd + 1, &ReadFds, NULL, NULL, &TOut);
if (iReturn <= 0)
{
writelogf(gManageLogFile, 1, "
在socket通信中,server端使用了select函数来判断哪个客户端已经准备好了。 select(FD_SETSIZE,&readfd_set,NULL,NULL,NULL); 可是在客户端往socket中写入数据后,服务端没有反应。 请问到底在什么状况下,select才认为fd set中的描述符已做好准备了? 谢谢
#undef max #define max(x,y) ((x) >; (y) ? (x) : (y)) ...... int fd1 = 4, fd2 =5;(假设) FD_SET (fd1, &rd); FD_SET (fd2, &rd); int n=max(fd1,fd2) ; select(n+1,&rd,NULL,NULL,NULL); 下面两个哪个为真,还是都为真,为什么? FD_ISSET(fd1,&rd); FD_ISSET(fd2,&rd);
想问问这两个线程里同时 select 同一个fd,会不会有冲突问题,或在select 后的send/recv中会不会有冲突 void thread1() { ....... ::select(fd+1, &rset, NULL, &eset, &timeout); ....... ::recv(fd,buf, MAX_PACKET_SIZE, 0); } void thread2() { ....... ::select(fd + 1, NULL, &wset, &eset, &timeout); ....... ::send(fd, buffer, length , 0); }
以下是unix网络编程上figure6.22的代码,我没有明白为什么要将rset = allset; 而在select里又用rset ,我觉的应该在将select函数的第2,3,4个参数全部设置。 25 for ( ; ; ) { 26 rset = allset; /* structure assignment */ 27 nready = select(maxfd + 1, &rset, NULL, NULL, NULL); 28 if (FD_ISSET(listenfd, &rset)) { /* new client connection */ 29 ...
写了个ping ,基本功能实现了,想在超时那用select,可是运行时发现ping一个局域网未使用的ip时候第一次读时select返回是0,以后再读返回全是1,意味着有一个socket可读,应该一直返回0,没有数据可读才对阿,实在搞不懂,请各位高手帮忙看一下。下面是缩减的代码部分 # define READ 1 # define WRITE 0 int main(int argc,char**argv ) { int ret,nsend=1; wile(nsend<10) { . . ret=sock_select(sockfd,READ...