读书人

多线程中调用sendto线程数一多下床

发布时间: 2013-12-21 20:16:01 作者: rapoo

多线程中调用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 当然有问题了.
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

当然了,并发socket除非这个socket是udp>

谢谢指导,我刚刚也试了试一个线程用一个socket的方法,虽然解决了sendto的问题,但是引入了新问题,比如指定要发sendto5个icmp报文,结果发了一百多个duplicate 报文后,才发送完毕,这该怎么办哦[/quote讲错了,是接受到了100多个duplicate报文,每个线程都是ping 的不同ip地址的


多个Thread 调用同一个 socket ,你注意同步了吗?

读书人网 >UNIXLINUX

热点推荐