【发布时间】:2019-03-18 23:02:41
【问题描述】:
我有一个接受客户端的服务器。我正在做一些多线程,当我创建一个线程时,我将 socketfd 作为参数传递。接受失败,因为它需要的 sockFd 为零。但是我不知道为什么会这样。 sockfd 对 take_client 函数有效,并且已正确设置。我刚刚包含了我的代码的这一部分,因为我确定问题就在这里。
void* thread_func(void* pSockfd) {
int sockFd;
sockFd = *(int*)pSockfd;
printf("sockFD = %d\n", sockFd); //returns zero
struct sockaddr_in sockAddr;
socklen_t sockAddrSize;
sockAddrSize = sizeof(struct sockaddr_in);
accept(sockFd, (struct sockaddr*) &sockAddr, &sockAddrSize);
return 0;
}
void take_client(int sock) { //when called, 'sock' is a valid number > 0
pthread_t thread_id;
pthread_create(&thread_id, NULL, thread_func, (void*)&sock);
}
如果有什么突出的可能是一个问题,我将非常感激听到。谢谢!
【问题讨论】:
-
0 对于文件描述符来说是完全可以的(即使在这里,它可能不是你需要的 fd 值)
-
与stackoverflow.com/q/52712559/694576 不完全相同,但实际上是同样的问题。
标签: c multithreading sockets networking pthreads