多线程中调用sendto,线程数一多起来,出现 bad file descriptor
在使用多线程调用函数sendto进行无连接的发包时,两三个线程可以正常跑,但是线程数一多,就出现了
sendto: Bad file descriptor
线程函数中的部分代码如下:
pingsock = socket(AF_INET, SOCK_RAW, 1);
if (pingsock < 0) {
printf("the skt is %d\n", skt);
return NULL;
}
setsockopt(pingsock, SOL_SOCKET, SO_SNDTIMEO, (char *)&nNetTimeout, sizeo(int));
c = sendto(pingsock, packet, sizeof(packet), 0, (struct sockaddr *)&pingaddr[index], sizeof(struct sockaddr_in));
if (c < 0) {
perror(" sendto: ");
close(pingsock);
return NULL;
}
是不是一个socket只能由一个线程使用,这里要多个线程的话,得开多个socket,一个线程用一个?还是说有其他问题呢?
------解决方案--------------------当然了,并发socket除非这个socket是udp>
------解决方案--------------------你只开 socket 不关 socket 当然有问题了.
------解决方案--------------------