c - 检测传入套接字连接

标签 c sockets

我正在编写一个服务器应用程序,但在套接字上的selecting 时遇到了问题。 服务器端 select 始终返回 0,即使客户端尝试连接也是如此。当我评论 select 并直接进入 accept 行时一切正常(但我的应用程序被阻止)

服务器代码(C 语言):

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
memset((char *) &serv_addr, 0, sizeof (serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(System_->commParams.port);
bind(sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr));
fd_set fds;
timeval tv;
FD_ZERO(&fds);
FD_SET(sockfd, &fds);
int retval = 0;
tv.tv_sec = 1;
tv.tv_usec = 0;
listen(sockfd, 5);
while (retval == 0)
{
   retval = select(1, &fds, NULL, NULL, &tv);
   tv.tv_sec = 1;
   tv.tv_usec = 0;
   FD_ZERO(&fds);
   FD_SET(sockfd, &fds);        
}
unsigned int clilen = sizeof (cli_addr);
int newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

客户端代码((在 python 中):

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((RemoteIP, Port))

最佳答案

retval = select(1, &fds, NULL, NULL, &tv);

select 的第一个参数应该是 sockfd + 1

关于c - 检测传入套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10074057/

相关文章:

c - 当我处理信号_handler和主函数中的变量时,如何屏蔽信号

c - 如何比较两个文件的字符串?

c# - UDP - 我可以发送两个数据报部分,并让接收端将它们合并为一个吗?

c++ - 读取整个文件并通过套接字发送

java - RMI服务运行方式与socket类似

c++ - 如何创建与系统函数同名的方法?

java - 如何在远程服务器上启动 java socket-server

c - 为什么用三元运算符初始化数组是非法的?

C 排序算法没有输出正确的值?

c++ - 应用程序可以自行终止的最暴力方式是什么(linux)