子プロセスでacceptedなソケットをclose()すれば、FINパケットが送られると思っていたが、親プロセスでもacceptedなソケットをclose()する必要があった UNIXネットワークプログラミング第2版の4.8節 並行サーバに以下のようなことが書かれていた。 ソケットやファイルはすべて参照カウントをもつ。fork()すると子プロセスがディスクリプタを複製するため、参照カウントが2になり、子プロセスがclose()するだけだと参照カウントが0にならず、FINパケットが送信されない。したがって、親プロセスでも同じソケットディスクリプタをclose()する必要がある。 強制的にFINを送るshutdown()というものもある。shutdown()をどういうときに使うかもUNIXネットワークプログラミングにかかれていた。 大量に子プロセスが残っていて、ab -n 1000 -c 1
[pid 2406] accept4(3, <unfinished ...> [pid 2407] sched_yield( <unfinished ...> [pid 2406] <... accept4 resumed> {sa_family=AF_INET, sin_port=htons(42741), sin_addr=inet_addr("127.0.0.1")}, [16], SOCK_CLOEXEC|SOCK_NONBLOCK) = 5 [pid 2406] epoll_ctl(4, EPOLL_CTL_ADD, 5, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=1105458016, u64=139991269503840}}) = 0 [pid 2406] getsockname(5, {sa_family=AF_INET, si
syscall(2) System Calls Manual syscall(2) NAME topsyscall - indirect system call LIBRARY topStandard C library (libc, -lc) SYNOPSIS top#include <sys/syscall.h> /* Definition of SYS_* constants */ #include <unistd.h> long syscall(long number, ...); Feature Test Macro Requirements for glibc (see feature_test_macros(7)): syscall(): Since glibc 2.19: _DEFAULT_SOURCE Before glib
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く