原帖:
我一直在从 Beej 的学校网络编程指南学习网络编程。我目前正在为自己开发一个原型,以通过使用线程和 I/O 多路复用在多个连接之间同时进行通信。我遇到了一个问题,当我收到连接并调用 accept() 以将新文件描述符返回到“new_fd”而不是返回新文件描述符时,它返回 1。这对我来说没有意义,因为我在我的代码中不关闭 stdout 并且 accept() 应该返回对套接字的引用作为新的文件描述符,据我所知,线程在单个进程中共享相同的文件描述符,所以它不应该是一个问题我把它穿好了。我认为问题可能是我使用环回从自己的计算机连接,
原始发布代码: http: //pastebin.com/APQYjxg9 (我已经发布了所有代码)
为了清楚起见,对此进行编辑。我的代码有两个问题。R.. 立即指出了第一个,代码片段在这里:
if (value = pthread_create((chat+chat_count), NULL, chatDaemon, (void *) &new_fd) != 0)
{ -snip- }
void * chatDaemon(void * fd)
{
int my_fd = *((int *)fd);
-snip-
}
后来我弄清楚出了什么问题并发布了我的答案。这里的代码片段:
if (new_fd = accept(listen_fd, (struct sockaddr*) &(remoteHost), &addrlen) != -1) { -snip-}