我正在尝试了解并行线程上套接字 API(recv
、send
、select
、close
等)的使用。这意味着在两个并行线程上使用一个套接字文件描述符。我已经解决了这个问题。但是我仍然找不到任何标准文档来解释多线程中套接字 API 的使用。甚至opengroup手册页也没有说明这一点。
我还想知道下面列出的并行线程使用场景在 POSIX 套接字 API 中是否有效
1)在两个并行线程中调用recv
和send
int main_thread() {
fd = do_connect(); //TCP or UDP
spawn_thread(recv_thread, fd);
spwan_thread(send_thread, fd);
...
}
int recv_thread(fd) {
while(1) {
recv(fd, ..)
...
}
}
int send_thread(fd) {
while(1) {
send(fd, ..)
...
}
}
2)在两个并行线程中调用recv
and send
withselect
int recv_thread(fd) {
while(1) {
select(fd in readfd)
recv(fd, ..)
...
}
}
int send_thread(fd) {
while(1) {
select(fd in write)
send(fd, ..)
...
}
}
3 )在两个并行线程中调用recv
and send
, setsockopt
,ioctl
fcntl
int recv_thread(fd) {
int flag = 1
while(1) {
ioctl(fd, FIONBIO, &flag); //enable non block
recv(fd, ..)
flag = 0;
ioctl(fd, FIONBIO, &flag); //disable non block
...
}
}
int send_thread(fd) {
while(1) {
select(fd in write)
send(fd, ..)
...
}
}