並列スレッドでのソケット API ( recv
、send
、select
、など) の使用法を理解しようとしています。close
これは、2 つの並列スレッドで 1 つのソケット ファイル記述子を使用することを意味します。私はこの質問を経験しました。それでも、マルチスレッドでのソケット API の使用法を説明する標準ドキュメントを見つけることができません。opengroupの man ページでさえ、これについて何も語っていません。
また、以下にリストされている並列スレッドの使用シナリオが POSIX ソケット API で有効かどうかも知りたいです。
recv
1)およびsend
2 つの並列スレッドでの呼び出し
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) 2 つの並列スレッドでrecv
and send
withを呼び出すselect
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) 2 つの並列スレッドで, ,を使用してrecv
andsend
を呼び出す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, ..)
...
}
}