socketfd=accept(hServer, (struct sockaddr *)&sin, &len); printf socketfd 的时候, socketfd 是 0, 这是怎么回事???
总结自己在运用accept函数时所出现的的“Invalid Argument”时的错误,主要有以下两种误用: 首先简单介绍一下accept函数 头文件#include 定义:int accept(int sockfd, struct sockaddr* addr, socklen_t *addrlen) 返回值:非负描述字-成功,-1出错 出错情况1: 在参数1处出错,多半情况是sockfd值非法,也即是没有绑定(bind),监听(listen)或者是负值等等; 出错情况2:在参数3处出错,没有给addrlen传入合法的值,或者是...
while(1) { //每次循环,读写集初始化 rset = allset; wset = allset; //设置非阻塞I/O io_block_var = fcntl(tcp_fd, F_GETFL, 0); fcntl(tcp_fd, F_SETFL, io_block_var|O_NONBLOCK); nready = select(maxfd + 1, &rset, NULL, NULL, NULL); //检查读集合,如果对应的TCP socket有新连接,则处理 if (FD_ISSET(tcp_fd, &rset)) { sin_size = sizeof(struct sockaddr_in); //接收新连接 ...
服务器端程序是在LINUX下运行的,使用非阻塞模式,调用select检查是否有连接或有接收的数据。 客户端发起连接后,客户端显示连接成功,但服务器端调用accept函数返回的连接套接字是一负数,很大,大概是-1000000000左右。 偶刚开始学SOCKET,求高手帮忙啊
iacceptFD = accept(iListen,(struct sockaddr *)NULL,NULL); FD_ZERO(&writefds); FD_SET(fd,&writefds); found = select(fd+1,NULL,&writefds,NULL,&tt); 返回值为iacceptFD 为0 ,而此时当执行select调用时候出错,errno 错误类型为EBADF(An invalid file descriptor was given in one of the sets)。 什么原因造成返回值是0这个情况??
在7.1中程序一切正常;但是“移植”(目前是直接到7.3编译并运行)后,程序运行到write()--(client 端)和accept()--(server端)函数时,client端的进程就死掉。我查了一下系统man,发现他们之间是有变化,但是还没有发现可以影响程序的,可能是我粗心了,希望大家给点高见! THX!
在7.1中程序一切正常;但是“移植”(目前是直接到7.3编译并运行)后,程序运行到write()--(client 端)和accept()--(server端)函数时,client端的进程就死掉。我查了一下系统man,发现他们之间是有变化,但是还没有发现可以影响程序的,可能是我粗心了,希望大家给点高见! THX!