socket

Autres langues

Langue: ja

Version: 2004-05-27 (openSuse - 09/10/07)

Autres sections - même nom

Section: 7 (Divers)

̾Á°

socket - Linux ¤Î¥½¥±¥Ã¥È¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹

½ñ¼°

#include <sys/socket.h>
mysocket = socket(int socket_family, int socket_type, int protocol);

ÀâÌÀ

¤³¤Î¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤Ï Linux ¥Í¥Ã¥È¥ï¡¼¥¯¤Î¥½¥±¥Ã¥ÈÁؤËÂФ¹¤ë ¥æ¡¼¥¶¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òµ­½Ò¤¹¤ë¤â¤Î¤Ç¤¢¤ë¡£ BSD ¸ß´¹¥½¥±¥Ã¥È¤Ï¡¢¥æ¡¼¥¶¥×¥í¥»¥¹¤È¥«¡¼¥Í¥ëÆâÉô¤Î ¥Í¥Ã¥È¥ï¡¼¥¯¥×¥í¥È¥³¥ë¥¹¥¿¥Ã¥¯·²¤È¤Î´Ö¤Ë¡¢ Åý°ìŪ¤Ê¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄ󶡤¹¤ë¤â¤Î¤Ç¤¢¤ë¡£ ¥×¥í¥È¥³¥ë¥â¥¸¥å¡¼¥ë¤Ï ¥×¥í¥È¥³¥ë¥Õ¥¡¥ß¥ê¡¼ (protocol familiy) (Î㡧 PF_INET, PF_IPX, PF_PACKET) ¤È ¥½¥±¥Ã¥È¥¿¥¤¥× (socket types) (Î㡧 SOCK_STREAM, SOCK_DGRAM) ¤ËʬÎà¤Ç¤­¤ë¡£ ¤³¤ì¤é¤Ë´Ø¤¹¤ë¤è¤ê¾Ü¤·¤¤¾ðÊó¤Ï socket(2) ¤ò»²¾È¤Î¤³¤È¡£

¥½¥±¥Ã¥ÈÁؤδؿô·²

¤³¤ì¤é¤Î´Ø¿ô¤Ï¥æ¡¼¥¶¥×¥í¥»¥¹¤¬¥Ñ¥±¥Ã¥È¤òÁ÷¼õ¿®¤·¤¿¤ê¡¢¤½¤Î¾¤Î¥½¥±¥Ã¥ÈÁàºî¤ò ¹Ô¤Ã¤¿¤ê¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë¡£¾ÜºÙ¤Ï¤½¤ì¤¾¤ì¤Î¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤ò ¸«¤Æ¤Û¤·¤¤¡£

socket(2) ¤Ï¥½¥±¥Ã¥È¤òÀ¸À®¤¹¤ë¡£ connect(2) ¤Ï¥½¥±¥Ã¥È¤ò¥ê¥â¡¼¥È¤Î¥½¥±¥Ã¥È¥¢¥É¥ì¥¹¤ËÀܳ¤¹¤ë¡£ bind(2) ¤Ï¥½¥±¥Ã¥È¤ò¥í¡¼¥«¥ë¤Î¥½¥±¥Ã¥È¥¢¥É¥ì¥¹¤Ë¥Ð¥¤¥ó¥É¤¹¤ë¡£ listen(2) ¤Ï¥½¥±¥Ã¥È¤Ë¿·¤·¤¤Àܳ¤¬Í褿¤é¼õ¿®¤¹¤ë¤è¤¦¤ËÅÁ¤¨¡¢ accept(2) ¤Ï³°Éô¤«¤é¤ä¤Ã¤Æ¤­¤¿Àܳ¤ËÂФ·¤Æ¿·¤·¤¤¥½¥±¥Ã¥È¤òÆÀ¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë¡£ socketpair(2) ¤Ï¸ß¤¤¤ËÀܳ¤µ¤ì¤¿Æó¤Ä¤Î̾Á°Ìµ¤·¥½¥±¥Ã¥È (anonymous socket) ¤òÊÖ¤¹ (PF_UNIX ¤Î¤è¤¦¤Ê¡¢¤¤¤¯¤Ä¤«¤Î¥í¡¼¥«¥ë¤Ê¥Õ¥¡¥ß¥ê¡¼¤Ç¤·¤«¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤)¡£

send(2), sendto(2), sendmsg(2) ¤Ï¥½¥±¥Ã¥È¤òÄ̤·¤Æ¥Ç¡¼¥¿¤òÁ÷¿®¤·¡¢ recv(2) recvfrom(2), recvmsg(2) ¤Ï¥½¥±¥Ã¥È¤«¤é¥Ç¡¼¥¿¤ò¼õ¿®¤¹¤ë¡£ poll(2) ¤È select(2) ¤Ï¥Ç¡¼¥¿¤ÎÅþÃå¤òÂԤ俤ꡢ¥Ç¡¼¥¿Á÷¿®¤Î½àÈ÷¤¬¤Ç¤­¤ë¤Þ¤ÇÂԤ俤ꤹ¤ë¡£ ¤µ¤é¤Ë¡¢ write(2), writev(2), sendfile(2), read(2), readv(2) ¤Î¤è¤¦¤Êɸ½àŪ¤Ê I/O Áàºî¤â¥Ç¡¼¥¿¤ÎÆɤ߽ñ¤­¤ËÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

getsockbyname(2) ¤Ï¥í¡¼¥«¥ë¤Î¥½¥±¥Ã¥È¥¢¥É¥ì¥¹¤òÊÖ¤·¡¢ getpeername(2) ¤Ï¥ê¥â¡¼¥È¤Î¥½¥±¥Ã¥È¥¢¥É¥ì¥¹¤òÊÖ¤¹¡£ getsockopt(2) ¤È setsockopt(2) ¤Ï¥½¥±¥Ã¥ÈÁؤΥª¥×¥·¥ç¥ó¤ä¥×¥í¥È¥³¥ë¥ª¥×¥·¥ç¥ó¤Î¼èÆÀ¡¦ÀßÄê¤ËÍѤ¤¤é¤ì¤ë¡£ ¾¤Î¤¤¤¯¤Ä¤«¤Î¥ª¥×¥·¥ç¥ó¤Î¼èÆÀ¡¦ÀßÄê¤Ë¤Ï ioctl(2) ¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£

close(2) ¤Ï¥½¥±¥Ã¥È¤ò¥¯¥í¡¼¥º¤¹¤ë¡£ shutdown(2) ¤ÏÁ´Æó½Å¤Ê¥½¥±¥Ã¥ÈÀܳ¤òÉôʬŪ¤Ë¥¯¥í¡¼¥º¤¹¤ë¡£

¥·¡¼¥¯Æ°ºî¤ä¡¢ 0 °Ê³°¤Î°ÌÃÖ¤ËÂФ¹¤ë pread(2) ¤ä pwrite(2) ¤Ï¥½¥±¥Ã¥È¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¡£

Èó¥Ö¥í¥Ã¥­¥ó¥°¤Ê I/O ¤ò¥½¥±¥Ã¥È¤Ç¹Ô¤¦¤³¤È¤Ï²Äǽ¤Ç¡¢ fcntl(2) ¤ò»È¤Ã¤Æ¥½¥±¥Ã¥È¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë O_NONBLOCK ¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ì¤ÐÎɤ¤¡£ ¤³¤¦¤¹¤ë¤È¥Ö¥í¥Ã¥¯¤µ¤ì¤ëÁàºî¤Ï¡¢ (Ä̾ï) EAGAIN ¥¨¥é¡¼¤ÇÌá¤ë¤³¤È¤Ë¤Ê¤ë (¸å¤Ç½èÍý¤¬ºÆ»î¹Ô¤µ¤ì¤ë¤³¤È¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤ë)¡£ connect(2) ¤Ç¤Ï EINPROGRESS ¥¨¥é¡¼¤¬ÊÖ¤µ¤ì¤ë¡£ ¤³¤Î¾ì¹ç¡¢¥æ¡¼¥¶¤Ï¤µ¤Þ¤¶¤Þ¤Ê¥¤¥Ù¥ó¥È¤ò poll(2) ¤ä select(2) ¤ò»È¤Ã¤ÆÂԤĤ³¤È¤¬¤Ç¤­¤ë¡£

I/O ¥¤¥Ù¥ó¥È
¥¤¥Ù¥ó¥È poll ¥Õ¥é¥° ÆâÍÆ
Read POLLIN ¿·¤·¤¤¥Ç¡¼¥¿¤¬ÅþÃ夷¤¿¡£
Read POLLIN (Àܳ»Ö¸þ¤Î¥½¥±¥Ã¥È¤Ç) Àܳ¤ÎÀßÄ꤬½ªÎ»¤·¤¿¡£
Read POLLHUP ÀܳÀè¤ÇÀÚÃÇÍ׵᤬À¸À®¤µ¤ì¤¿¡£
Read POLLHUP Àܳ¤¬²õ¤ì¤¿ (Àܳ»Ö¸þ¤Î¥×¥í¥È¥³¥ë¤Î¤ß)¡£ ¤³¤Î¾ì¹ç¡¢¥½¥±¥Ã¥È¤Ë½ñ¤­¹þ¤ß¤¬¹Ô¤ï¤ì¤ë¤È SIGPIPE ¤âÁ÷¿®¤µ¤ì¤ë¡£
Write POLLOUT ¥½¥±¥Ã¥È¤Ë¤Ï¿·¤·¤¤¥Ç¡¼¥¿¤ò½ñ¤­¹þ¤à¤Î¤Ë ½¼Ê¬¤Ê¥Ð¥Ã¥Õ¥¡Îΰ褬¤¢¤ë¡£
Read/Write POLLIN|
POLLOUT
³°Éô¸þ¤±¤Î connect(2) ¤¬½ªÎ»¤·¤¿¡£
Read/Write POLLERR ÈóƱ´üŪ (asynchronous) ¤Ê¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿¡£
Read/Write POLLHUP ÀܳÀ褬ÊÒÊý¸þ¤òÀÚÃǤ·¤¿¡£
Exception POLLPRI ¶ÛµÞ¥Ç¡¼¥¿ (urgent data) ¤¬ÅþÃ夷¤¿¡£ ¤³¤Î¾ì¹ç¤Ï SIGURG ¤¬Á÷¿®¤µ¤ì¤ë¡£

poll(2) ¤ä select(2) ¤ò»È¤¦Âå¤ï¤ê¤Ë¡¢¥«¡¼¥Í¥ë¤«¤é¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë ¥¤¥Ù¥ó¥È¤òÄÌÃΤµ¤»¤ë¤Î¤Ë SIGIO ¥·¥°¥Ê¥ë¤ò»È¤¦ÊýË¡¤â¤¢¤ë¡£ ¤³¤ÎÊýË¡¤ò»È¤¦¤Ë¤Ï¡¢ fcntl(2) ¤òÍѤ¤¤Æ¥½¥±¥Ã¥È¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë FASYNC ¥Õ¥é¥°¤ò¥»¥Ã¥È¤·¡¢ SIGIO ¤ËÂФ¹¤ëÍ­¸ú¤Ê¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ò sigaction(2) ¤Ë¤è¤Ã¤ÆÀßÄꤷ¤Æ¤ª¤¯É¬Íפ¬¤¢¤ë¡£ ¸å½Ò¤Î ¥·¥°¥Ê¥ë ¤Ë´Ø¤¹¤ëµÄÏÀ¤â»²¹Í¤Ë¤¹¤ë¤³¤È¡£

¥½¥±¥Ã¥È¥ª¥×¥·¥ç¥ó

¤³¤ì¤é¤Î¥½¥±¥Ã¥È¥ª¥×¥·¥ç¥ó¤Ï¡¢ setsockopt(2) ¤òÍѤ¤¤ì¤ÐÀßÄê¤Ç¤­¡¢ getsockopt(2) ¤òÍѤ¤¤ì¤Ð¼èÆÀ¤Ç¤­¤ë¡£ ⤷¡¢¤É¤Î¥½¥±¥Ã¥È¤Î¾ì¹ç¤â ¥½¥±¥Ã¥È¥ì¥Ù¥ë¤Ë¤Ï SOL_SOCKET ¤ò»ØÄꤹ¤ë¤³¤È¡£
SO_ACCEPTCONN
¤³¤Î¥½¥±¥Ã¥È¤¬ listen(2) ¤Ë¤è¤Ã¤ÆÀܳÂÔ¤Á¼õ¤±¾õÂÖ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò¼¨¤¹ÃͤòÊÖ¤¹¡£ ÃÍ 0 ¤Ï listen ¾õÂ֤Υ½¥±¥Ã¥È¤Ç¤Ê¤¤¤³¤È¤ò¡¢ ÃÍ 1 ¤Ï listen ¾õÂ֤Υ½¥±¥Ã¥È¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹¡£ getsockopt(2) ¤«¤é¤Î¤ßÆɤ߽Ф·²Äǽ¤Ç¤¢¤ë¡£
SO_BINDTODEVICE
¤³¤Î¥½¥±¥Ã¥È¤ò¡¢°ú¤­¿ô¤ÇÅϤ·¤¿¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Ì¾¤Ç»ØÄꤵ¤ì¤ë ("eth0" ¤Î¤è¤¦¤Ê) ÆÃÄê¤Î¥Ç¥Ð¥¤¥¹¤Ë¥Ð¥¤¥ó¥É¤¹¤ë¡£ ̾Á°¤¬¶õʸ»úÎó¤À¤Ã¤¿¤ê¡¢¥ª¥×¥·¥ç¥ó¤ÎŤµ (optlen) ¤¬ 0 ¤Î¾ì¹ç¤Ë¤Ï¡¢ ¥½¥±¥Ã¥È¤Î¥Ð¥¤¥ó¥É¤¬ºï½ü¤µ¤ì¤ë¡£ÅϤ¹¥ª¥×¥·¥ç¥ó¤Ï¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Ì¾¤¬ Æþ¤Ã¤¿¥Ì¥ëʸ»ú¤Ç½ªÃ¼¤µ¤ì¤¿²ÄÊÑŤÎʸ»úÎó¤Ç¤¢¤ë¡£ ʸ»úÎó¤ÎºÇÂç¤Î¥µ¥¤¥º¤Ï IFNAMSIX ¤Ç¤¢¤ë¡£ ¥½¥±¥Ã¥È¤¬¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë¥Ð¥¤¥ó¥É¤µ¤ì¤ë¤È¡¢ ¤½¤ÎÆÃÄê¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤«¤é¼õ¿®¤µ¤ì¤¿¥Ñ¥±¥Ã¥È¤À¤±¤ò½èÍý¤¹¤ë¡£ ¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¤¤¤¯¤Ä¤«¤Î¥½¥±¥Ã¥È¥¿¥¤¥×¡¢ÆÃ¤Ë AF_INET ¤ËÂФ·¤Æ¤Î¤ßÆ°ºî¤¹¤ëÅÀ¤ËÃí°Õ¤¹¤ë¤³¤È¡£ ¥Ñ¥±¥Ã¥È¥½¥±¥Ã¥È¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ (Ä̾ï¤Î bind(8) ¤ò»È¤¦¤³¤È)¡£
SO_BROADCAST
¥Ö¥í¡¼¥É¥­¥ã¥¹¥È¥Õ¥é¥°¤òÀßÄꡦ¼èÆÀ¤¹¤ë¡£Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¡¢ ¥Ç¡¼¥¿¥°¥é¥à¥½¥±¥Ã¥È¤Ï¥Ö¥í¡¼¥É¥­¥ã¥¹¥È¥¢¥É¥ì¥¹¤ËÁ÷¤é¤ì¤¿¥Ñ¥±¥Ã¥È¤ò¼õ¿®¤·¤¿¤ê¡¢ ¥Ö¥í¡¼¥É¥­¥ã¥¹¥È¥¢¥É¥ì¥¹¤Ë¥Ñ¥±¥Ã¥È¤òÁ÷¿®¤·¤¿¤ê¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ë¡£ ¥¹¥È¥ê¡¼¥à»Ø¸þ¤Î¥½¥±¥Ã¥È¤Ë¤Ï²¿¤Î¸ú²Ì¤â¤Ê¤¤¡£
SO_BSDCOMPAT
BSD ¤Î¥Ð¥°¤ËÂФ·¤Æ¸ß´¹À­¤ò¼è¤ë¤¿¤á¤Îµ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¡£ ¤³¤Îµ¡Ç½¤Ï Linux 2.0 ¤È 2.2 ¤Î UDP ¥×¥í¥È¥³¥ë¥â¥¸¥å¡¼¥ë¤Ç»ÈÍѤµ¤ì¤Æ¤¤¤ë¡£ Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¡¢ UDP ¥½¥±¥Ã¥È¤Ç¼õ¿®¤µ¤ì¤¿ ICMP ¥¨¥é¡¼¤Ï ¥æ¡¼¥¶¥×¥í¥°¥é¥à¤ËÅϤµ¤ì¤Ê¤¤¡£ ¤³¤ì°Ê¹ß¤Î¥Ð¡¼¥¸¥ç¥ó¤Î¥«¡¼¥Í¥ë¤Ç¤Ï¡¢¤³¤Î¥ª¥×¥·¥ç¥ó¤Î¥µ¥Ý¡¼¥È¤Ï Ãʳ¬Åª¤ËÇѻߤµ¤ì¤Æ¤­¤¿¡£ Linux 2.4 ¤Ç¤Ï¤³¤Î¥ª¥×¥·¥ç¥ó¤ÏÌۤäÆ̵»ë¤µ¤ì¡¢ Linux 2.6 ¤Ç¤Ï¥×¥í¥°¥é¥à¤¬¤³¤Î¥ª¥×¥·¥ç¥ó¤ò»ÈÍѤ¹¤ë¤È (printk() ¤ò»È¤Ã¤Æ) ¥«¡¼¥Í¥ë¤Î·Ù¹ð¥á¥Ã¥»¡¼¥¸¤¬½ÐÎϤµ¤ì¤ë¡£ Linux 2.0 ¤Ç¤Ï¡¢¤³¤Î¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¤È¡¢ raw ¥½¥±¥Ã¥È¤Ë¤ª¤¤¤Æ¤â BSD ¤Î¥Ð¥° (¥é¥ó¥À¥à¥Ø¥Ã¥ÀÊѹ¹¡¢ ¥Ö¥í¡¼¥É¥­¥ã¥¹¥È¥Õ¥é¥°¤Î¥¹¥­¥Ã¥×) ¤ËÂФ¹¤ë¸ß´¹µ¡Ç½¤¬Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤¿¡£ ¤·¤«¤·¡¢¤³¤Á¤é¤Ï Linux 2.2 ¤Çºï½ü¤µ¤ì¤¿¡£
SO_DEBUG
¥½¥±¥Ã¥È¤Î¥Ç¥Ð¥Ã¥°µ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¡£ CAP_NET_ADMIN ¸¢¸Â¤ò»ý¤Ä¥×¥í¥»¥¹¤«¡¢¼Â¸ú¥æ¡¼¥¶ ID ¤¬ 0 ¤Î¥×¥í¥»¥¹¤Ç¤·¤« ÍøÍѤǤ­¤Ê¤¤¡£
SO_ERROR
ÊÝα¤Ë¤Ê¤Ã¤Æ¤¤¤¿¥½¥±¥Ã¥È¥¨¥é¡¼¤ò¼èÆÀ¤·¤Æ¥¯¥ê¥¢¤¹¤ë¡£ getsockopt(2) ¤Ç¤Î¤ßÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ À°¿ôÃͤò¤È¤ë¡£
SO_DONTROUTE
¥²¡¼¥È¥¦¥§¥¤¤ò·Ðͳ¤»¤º¡¢Ä¾ÀÜÀܳ¤µ¤ì¤Æ¤¤¤ë¥Û¥¹¥È¤ËÁ÷¿®¤¹¤ë¡£ send(2) Áàºî¤Ç MSG_DONTROUTE ¥Õ¥é¥°¤ò¥»¥Ã¥È¤·¤¿¾ì¹ç¤âƱ¤¸¸ú²Ì¤¬ÆÀ¤é¤ì¤ë¡£ ¥Ö¡¼¥ëÀ°¿ô¤Î¥Õ¥é¥°¤ò¼è¤ë¡£
SO_KEEPALIVE
Àܳ»Ö¸þ¤Î¥½¥±¥Ã¥È¤ËÂФ¹¤ë keep-alive ¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®¤òÍ­¸ú¤Ë¤¹¤ë¡£ ¥Ö¡¼¥ëÃͤÎÀ°¿ô¥Õ¥é¥°¤ò¤È¤ë¡£
SO_LINGER
SO_LINGER ¥ª¥×¥·¥ç¥ó¤ò¼èÆÀ¡¦ÀßÄꤹ¤ë¡£°ú¤­¿ô¤Ë¤Ï linger ¹½Â¤ÂΤò¼è¤ë¡£

struct linger {

    int l_onoff;    /* linger active */

    int l_linger;   /* how many seconds to linger for */

};

Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¡¢ close(2) ¤ä shutdown(2) ¤Ï¡¢¤½¤Î¥½¥±¥Ã¥È¤Ë¥­¥å¡¼¥¤¥ó¥°¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤¬¤¹¤Ù¤ÆÁ÷¿®´°Î»¤¹¤ë¤«¡¢ linger (µï»Ä¤ê) ¥¿¥¤¥à¥¢¥¦¥È¤Ë¤Ê¤ë¤Þ¤ÇÊÖ¤é¤Ê¤¤¡£Ìµ¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¡¢ ¤³¤ì¤é¤Î¥³¡¼¥ë¤Ï¤¿¤À¤Á¤ËÌá¤ê¡¢¥¯¥í¡¼¥ºÆ°ºî¤Ï¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Ç¹Ô¤ï¤ì¤ë¡£ ¥½¥±¥Ã¥È¤Î¥¯¥í¡¼¥º¤ò exit(2) ¤Î°ìÉô¤È¤·¤Æ¹Ô¤Ã¤¿¾ì¹ç¤Ë¤Ï¡¢»Ä¤Ã¤Æ¤¤¤ë¥½¥±¥Ã¥È¤Î ¥¯¥í¡¼¥ºÆ°ºî¤Ïɬ¤º¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤ËÁ÷¤é¤ì¤ë¡£
SO_OOBINLINE
¤³¤Î¥ª¥×¥·¥ç¥ó¤òÍ­¸ú¤Ë¤¹¤ë¤È¡¢ÂÓ°è³°¥Ç¡¼¥¿ (out-of-band data) ¤Ï ¼õ¿®¥Ç¡¼¥¿¥¹¥È¥ê¡¼¥àÃæ¤ËÃÖ¤«¤ì¤ë¡£Í­¸ú¤Ë¤·¤Ê¤±¤ì¤Ð¡¢ ÂÓ°è³°¥Ç¡¼¥¿¤Ï¼õ¿®»þ¤Ë MSG_OOB ¥Õ¥é¥°¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¸Â¤Ã¤ÆÅϤµ¤ì¤ë¡£
SO_PASSCRED
SCM_CREDENTIALS À©¸æ¥á¥Ã¥»¡¼¥¸¤Î¼õ¿®¤òÍ­¸ú/̵¸ú¤Ë¤¹¤ë¡£¾ÜºÙ¤Ï unix(7) ¤ò»²¾È¤Î¤³¤È¡£
SO_PEERCRED
¤³¤Î¥½¥±¥Ã¥È¤ËÀܳ¤·¤Æ¤­¤¿³°Éô¥×¥í¥»¥¹¤Î¿®Ç¤¾õ (credential) ¤òÊÖ¤¹¡£ ¤³¤Î¥½¥±¥Ã¥È¥ª¥×¥·¥ç¥ó¤¬ÍøÍѤǤ­¤ë¤Î¤Ï¡¢ Àܳ¤µ¤ì¤¿ PF_UNIX ¥¹¥È¥ê¡¼¥à¥½¥±¥Ã¥È´Ö¡¢¤ª¤è¤Ó socketpair(2) ¤ò»È¤Ã¤ÆºîÀ®¤µ¤ì¤¿ PF_UNIX ¤Î¥¹¥È¥ê¡¼¥à¥½¥±¥Ã¥È¤È¥Ç¡¼¥¿¥°¥é¥à¥½¥±¥Ã¥È¤Î¥Ú¥¢¤À¤±¤Ç¤¢¤ë¡£ unix(7) ¤ò»²¾È¤Î¤³¤È¡£ connect(2) ¤ä socketpair(2) ¤¬¸Æ¤Ð¤ì¤¿»þ¤ËÍ­¸ú¤Ç¤¢¤Ã¤¿¿®Ç¤¾õ¤¬ÊÖ¤µ¤ì¤ë¡£ °ú¤­¿ô¤Ï ucred ¹½Â¤ÂΤǤ¢¤ë¡£ getsockopt(2) ¤Ç¤Î¤ßÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
SO_PRIORITY
¥×¥í¥È¥³¥ë¤ÇÄêµÁ¤µ¤ì¤¿Í¥ÀèÅÙ¤ò¡¢¤³¤Î¥½¥±¥Ã¥È¤«¤é Á÷¿®¤µ¤ì¤ëÁ´¤Æ¤Î¥Ñ¥±¥Ã¥È¤Ë¥»¥Ã¥È¤¹¤ë¡£ Linux ¤Ï¥Í¥Ã¥È¥ï¡¼¥¯¥­¥å¡¼ÆâÉô¤Î À°Îó¤Ë¤³¤ÎÃͤòÍѤ¤¤ë¡£¹â¤¤Í¥ÀèÅÙ¤ò»ý¤Ã¤Æ¤¤¤ë¥Ñ¥±¥Ã¥È¤ÏÀè¤Ë½èÍý¤µ¤ì¤ë¡£ ¤¿¤À¤·¤½¤Î¥Ç¥Ð¥¤¥¹¤Î¥­¥å¡¼½èÍý¤Î¤ä¤êÊý¤Ë°Í¸¤¹¤ë¡£ ip(7) ¤Ç¤Ï¡¢³°¸þ¤±¥Ñ¥±¥Ã¥È¤Î IP type-of-service (TOS) ¥Õ¥£¡¼¥ë¥É¤Ë¤â¤³¤ÎÃͤ¬ÀßÄꤵ¤ì¤ë¡£ 0 ¤«¤é 6 °Ê³°¤ÎÍ¥ÀèÅÙ¤ò¥»¥Ã¥È¤¹¤ë¤Ë¤Ï CAP_NET_ADMIN ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤¬É¬ÍפǤ¢¤ë¡£
SO_RCVBUF
¥½¥±¥Ã¥È¤Î¼õ¿®¥Ð¥Ã¥Õ¥¡¤ÎºÇÂ祵¥¤¥º¤òÀßÄꡦ¼èÆÀ¤¹¤ë (¥Ð¥¤¥Èñ°Ì)¡£ setsockopt(2) ¤ò»È¤Ã¤ÆÃͤ¬ÀßÄꤵ¤ì¤¿¤È¤­¤Ë (´ÉÍý¥ª¡¼¥Ð¥Ø¥Ã¥ÉÍѤÎÎΰè¤ò³ÎÊݤ¹¤ë¤¿¤á¤Ë) ¥«¡¼¥Í¥ë¤Ï¤³¤ÎÃͤò 2Çܤ·¡¢ getsockopt(2) ¤Ï¤³¤Î 2Çܤµ¤ì¤¿ÃͤòÊÖ¤¹¡£ ¥Ç¥Õ¥©¥ë¥È¤ÎÃÍ¤Ï rmem_default sysctl ¤ÇÀßÄꤵ¤ì¡¢µöÍƤµ¤ì¤ëºÇÂç¤ÎÃÍ¤Ï rmem_max sysctl ¤ÇÀßÄꤵ¤ì¤ë¡£ ¤³¤Î¥ª¥×¥·¥ç¥ó¤ÎºÇ¾®ÃÍ¤Ï (2Çܤ·¤¿ÃͤÇ) 256 ¤Ç¤¢¤ë¡£
SO_RCVBUFFORCE (Linux 2.6.14 °Ê¹ß)
¤³¤Î¥½¥±¥Ã¥È¥ª¥×¥·¥ç¥ó¤ò»È¤¦¤È¡¢Æø¢¥×¥í¥»¥¹ (CAP_NET_ADMIN ¤ò»ý¤Ä¥×¥í¥»¥¹) ¤Ï SO_RCVBUF ¤ÈƱ¤¸¤³¤È¤ò¼Â¹Ô¤Ç¤­¤ë¡£ ¤¿¤À¤·¡¢¾å¸Â rmem_max ¤ò¾å½ñ¤­¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
SO_RCVLOWAT ¤È SO_SNDLOWAT
¥Ð¥Ã¥Õ¥¡Ãæ¤Ëί¤á¤ë¤³¤È¤Î¤Ç¤­¤ë¥Ç¡¼¥¿¤ÎºÇ¾®Ãͤò»ØÄꤹ¤ë¡£ ¤³¤Î¥µ¥¤¥º¤ò±Û¤¨¤ë¤È¡¢¥½¥±¥Ã¥ÈÁؤϤ½¤Î¥Ç¡¼¥¿¤ò¥×¥í¥È¥³¥ë¤ËÅϤ· (SO_SNDLOWAT)¡¢ ¼õ¿®»þ¤Ë¤Ï¥æ¡¼¥¶¤ËÅϤ¹ (SO_RCVLOWAT)¡£ ¤³¤ì¤éÆó¤Ä¤ÎÃÍ¤Ï 1 ¤Ë½é´ü²½¤µ¤ì¤ë¡£ SO_SNDLOWAT ¤Ï Linux ¤Ç¤ÏÊѹ¹¤Ç¤­¤Ê¤¤ (setsockopt ¤Ï ENOPROTOOPT ¥¨¥é¡¼¤Ç¼ºÇÔ¤¹¤ë)¡£ SO_RCVLOWAT ¤Ï Linux 2.4 °Ê¹ß¤Ç¤Î¤ßÊѹ¹²Äǽ¤Ç¤¢¤ë¡£ ¸½¾õ¡¢Linux ¤Ç¤Ï¥·¥¹¥Æ¥à¥³¡¼¥ë select(2) ¤È poll(2) ¤Ï SO_RCVLOWAT ¤ÎÀßÄê¤ò¹Íθ¤ËÆþ¤ì¤º¤ËÆ°ºî¤·¡¢ ¥Ç¡¼¥¿¤¬1¥Ð¥¤¥ÈÍøÍѲÄǽ¤Ë¤Ê¤Ã¤¿¤À¤±¤Ç¤â¡¢ ¥½¥±¥Ã¥È¤ÏÆɤ߽Ф·²Äǽ¤È¤Î¥Þ¡¼¥¯¤ò¤Ä¤±¤ë¡£ °ìÊý¡¢¤½¤ì¤Ë³¤±¤Æ¹Ô¤¦¥½¥±¥Ã¥È¤«¤é¤Î read ¤Ï SO_RCVLOWAT ¥Ð¥¤¥È¤Î¥Ç¡¼¥¿¤¬ÍøÍѲÄǽ¤Ë¤Ê¤ë¤Þ¤ÇÄä»ß¤·¤Æ¤·¤Þ¤¦¡£
SO_RCVTIMEO ¤È SO_SNDTIMEO
Á÷¿®¡¦¼õ¿®¤Î¥¿¥¤¥à¥¢¥¦¥È¤ò»ØÄꤹ¤ë¡£¤³¤ì¤ò±Û¤¨¤ë¤È¥¨¥é¡¼¤òÊó¹ð¤¹¤ë¡£ °ú¤­¿ô¤Ï struct timeval ¤Ç¤¢¤ë¡£ Æþ½ÐÎÏ´Ø¿ô¤¬¥¿¥¤¥à¥¢¥¦¥È»þ´Ö¤Î´Ö¥Ö¥í¥Ã¥¯¤µ¤ì¡¢¤«¤Ä¥Ç¡¼¥¿¤ÎÁ÷¿®¤Þ¤¿¤Ï ¼õ¿®¤¬¹Ô¤ï¤ì¤Æ¤¤¤¿¾ì¹ç¤Ï¡¢Å¾Á÷¤µ¤ì¤¿¥Ç¡¼¥¿Î̤¬´Ø¿ô¤ÎÊÖ¤êÃͤȤʤ롣 ²¿¤â¥Ç¡¼¥¿¤¬Å¾Á÷¤µ¤ì¤º¤Ë¥¿¥¤¥à¥¢¥¦¥È¤Ë㤷¤¿¾ì¹ç¤Ï¡¢ -1 ¤òÊÖ¤·¡¢ errno ¤Ë EAGAIN ¤« EWOULDBLOCK ¤òÀßÄꤵ¤ì¡¢ ¤¢¤¿¤«¤â¥½¥±¥Ã¥È¤ËÈó¥Ö¥í¥Ã¥­¥ó¥°¤¬»ØÄꤵ¤ì¤¿¤è¤¦¤Ë¸«¤¨¤ë¡£ ¥¿¥¤¥à¥¢¥¦¥ÈÃÍ¤Ë (¥Ç¥Õ¥©¥ë¥ÈÃͤǤ¢¤ë) 0 ¤ËÀßÄꤹ¤ë¤È¡¢ Áàºî¤Ï·è¤·¤Æ¥¿¥¤¥à¥¢¥¦¥È¤·¤Ê¤¯¤Ê¤ë¡£
SO_REUSEADDR
bind(2) ¥³¡¼¥ë¤ËÍ¿¤¨¤é¤ì¤¿¥¢¥É¥ì¥¹¤¬Àµ¤·¤¤¤«¤òȽÃǤ¹¤ë¥ë¡¼¥ë¤Ç¡¢ ¥í¡¼¥«¥ë¥¢¥É¥ì¥¹¤ÎºÆÍøÍѤò²Äǽ¤Ë¤¹¤ë¡£ ¤Ä¤Þ¤ê PF_INET ¥½¥±¥Ã¥È¤Ê¤é¡¢¤½¤Î¥¢¥É¥ì¥¹¤Ë¥Ð¥¤¥ó¥É¤µ¤ì¤¿¥¢¥¯¥Æ¥£¥Ö¤Ê listen ¾õÂ֤Υ½¥±¥Ã¥È¤¬Â¸ºß¤·¤Ê¤¤¸Â¤ê¡¢¥Ð¥¤¥ó¥É¤¬¹Ô¤¨¤ë¡£ listen ¾õÂ֤Υ½¥±¥Ã¥È¤¬¥¢¥É¥ì¥¹ INADDR_ANY ¤ÇÆÃÄê¤Î¥Ý¡¼¥È¤Ë¥Ð¥¤¥ó¥É¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢ ¤³¤Î¥Ý¡¼¥È¤ËÂФ·¤Æ¤Ï¡¢¤É¤ó¤Ê¥í¡¼¥«¥ë¥¢¥É¥ì¥¹¤Ç¤â¥Ð¥¤¥ó¥É¤Ç¤­¤Ê¤¤¡£
SO_SNDBUF
¥½¥±¥Ã¥È¤ÎÁ÷¿®¥Ð¥Ã¥Õ¥¡¤ÎºÇÂ祵¥¤¥º¤òÀßÄꡦ¼èÆÀ¤¹¤ë (¥Ð¥¤¥Èñ°Ì)¡£ setsockopt(2) ¤ò»È¤Ã¤ÆÃͤ¬ÀßÄꤵ¤ì¤¿¤È¤­¤Ë (´ÉÍý¥ª¡¼¥Ð¥Ø¥Ã¥ÉÍѤÎÎΰè¤ò³ÎÊݤ¹¤ë¤¿¤á¤Ë) ¥«¡¼¥Í¥ë¤Ï¤³¤ÎÃͤò 2Çܤ·¡¢ getsockopt(2) ¤Ï¤³¤Î 2Çܤµ¤ì¤¿ÃͤòÊÖ¤¹¡£ ¥Ç¥Õ¥©¥ë¥È¤ÎÃÍ¤Ï wmem_default sysctl ¤ÇÀßÄꤵ¤ì¡¢µöÍƤµ¤ì¤ëºÇÂç¤ÎÃÍ¤Ï wmem_max sysctl ¤ÇÀßÄꤵ¤ì¤ë¡£ ¤³¤Î¥ª¥×¥·¥ç¥ó¤ÎºÇ¾®ÃÍ¤Ï (2Çܤ·¤¿ÃͤÇ) 2048 ¤Ç¤¢¤ë¡£
SO_SNDBUFFORCE (Linux 2.6.14 °Ê¹ß)
¤³¤Î¥½¥±¥Ã¥È¥ª¥×¥·¥ç¥ó¤ò»È¤¦¤È¡¢Æø¢¥×¥í¥»¥¹ (CAP_NET_ADMIN ¤ò»ý¤Ä¥×¥í¥»¥¹) ¤Ï SO_SNDBUF ¤ÈƱ¤¸¤³¤È¤ò¼Â¹Ô¤Ç¤­¤ë¡£ ¤¿¤À¤·¡¢¾å¸Â wmem_max ¤ò¾å½ñ¤­¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
SO_TIMESTAMP
SO_TIMESTAMP À©¸æ¥á¥Ã¥»¡¼¥¸¤Î¼õ¿®¤òÍ­¸ú/̵¸ú¤Ë¤¹¤ë¡£ ¥¿¥¤¥à¥¹¥¿¥ó¥×À©¸æ¥á¥Ã¥»¡¼¥¸¤Ï¥ì¥Ù¥ë SOL_SOCKET ¤ÇÁ÷¿®¤µ¤ì¡¢ cmsg_data ¥Õ¥£¡¼¥ë¥É¤Ï¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ç¥æ¡¼¥¶¤ËÅϤ·¤¿ ºÇ¸å¤Î¥Ñ¥±¥Ã¥È¤Î¼õ¿®»þ¹ï¤ò¼¨¤¹ struct timeval ¤Ç¤¢¤ë¡£ À©¸æ¥á¥Ã¥»¡¼¥¸¤Î¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï cmsg(3) ¤ò»²¾È¡£
SO_TYPE
¥½¥±¥Ã¥È¤Î¥¿¥¤¥×¤òÀ°¿ô¤Ç¼èÆÀ¤¹¤ë (Îã: SOCK_STREAM)¡£ getsockopt(2) ¤«¤é¤Î¤ßÆɤ߽Ф·²Äǽ¤Ç¤¢¤ë¡£

¥·¥°¥Ê¥ë

(¥í¡¼¥«¥ë¤â¤·¤¯¤Ï¥ê¥â¡¼¥È¦¤Ç) ÀÚÃǤµ¤ì¤¿ Àܳ»Ø¸þ (connection-oriented) ¤Î¥½¥±¥Ã¥È¤ËÂФ·¤Æ ½ñ¤­¹þ¤ß¤ò¹Ô¤¦¤È¡¢¤½¤Î½ñ¤­¹þ¤ß¤ò¹Ô¤Ã¤¿¥×¥í¥»¥¹¤Ë SIGPIPE ¤¬Á÷¤é¤ì¡¢ EPIPE ¤¬ÊÖ¤µ¤ì¤ë¡£ write ¸Æ¤Ó½Ð¤·¤Ë MSG_NOSIGNAL ¥Õ¥é¥°¤ò»ØÄꤷ¤Æ¤¤¤¿¾ì¹ç¤Ï¥·¥°¥Ê¥ë¤ÏÁ÷¤é¤ì¤Ê¤¤¡£

FIOSETOWN fcntl(2) ¤ä SIOCSPGRP ioctl(2) ¤ò¥×¥í¥»¥¹¤Þ¤¿¤Ï¥×¥í¥»¥¹¥°¥ë¡¼¥×¤Ë»ØÄꤷ¤Æ¤ª¤¯¤È¡¢ I/O ¥¤¥Ù¥ó¥È¤¬µ¯¤­¤¿¤È¤­¤Ë SIGIO ¤¬Á÷¤é¤ì¤ë¡£ poll(2) ¤ä select(2) ¤ò¥·¥°¥Ê¥ë¥Ï¥ó¥É¥éÆâ¤ÇÍѤ¤¤ì¤Ð¡¢¤É¤Î¥½¥±¥Ã¥È¤Ç¥¤¥Ù¥ó¥È¤¬µ¯¤³¤Ã¤¿¤«¤ò ÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£ (Linux 2.2 ¤Ë¤ª¤±¤ë) Ê̤ÎÊýË¡¤È¤·¤Æ¤Ï¡¢ F_SETSIG fcntl(2) ¤òÍѤ¤¤Æ¥ê¥¢¥ë¥¿¥¤¥à¥·¥°¥Ê¥ë¤òÀßÄꤹ¤ë¤ä¤êÊý¤â¤¢¤ë¡£ ¥ê¥¢¥ë¥¿¥¤¥à¥·¥°¥Ê¥ë¤Î¥Ï¥ó¥É¥é¤Ï¡¢ siginfo_t ¤Î si_fd ¥Õ¥£¡¼¥ë¥É¤Ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Æþ¤Ã¤¿¾õÂ֤ǸƤӽФµ¤ì¤ë¡£ ¾ÜºÙ¤Ï fcntl(2) ¤ò»²¾È¤Î¤³¤È¡£

¾õ¶·¤Ë¤è¤Ã¤Æ¤Ï (Î㤨¤ÐÊ£¿ô¤Î¥×¥í¥»¥¹¤¬°ì¤Ä¤Î¥½¥±¥Ã¥È¤Ë¥¢¥¯¥»¥¹¤·¤Æ¤¤¤ë¤Ê¤É)¡¢ SIGIO ¤Î¸¶°ø¤È¤Ê¤Ã¤¿¾õÂ֤ϡ¢¥×¥í¥»¥¹¤¬¤½¤Î¥·¥°¥Ê¥ë¤Ø¤ÎÂбþ¤ò¹Ô¤Ã¤¿¤È¤­¤Ë¤Ï ¾Ã¤¨¤Æ¤·¤Þ¤Ã¤Æ¤¤¤ë¤«¤â¤·¤ì¤Ê¤¤¡£ ¤³¤Î¾ì¹ç¤Ï¡¢¥×¥í¥»¥¹¤ÏºÆ¤ÓÂԤĤ褦¤Ë¤¹¤Ù¤­¤Ç¤¢¤ë¡£ Linux ¤ÏƱ¤¸¥·¥°¥Ê¥ë¤ò¸å¤ÇºÆÁ÷¤¹¤ë¤«¤é¤Ç¤¢¤ë¡£

sysctl

core ¥½¥±¥Ã¥È¤Î¥Í¥Ã¥È¥ï¡¼¥­¥ó¥° sysctl ¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤Ë¤Ï¡¢ /proc/sys/net/core/* ¥Õ¥¡¥¤¥ë¤òÄ̤·¤Æ¹Ô¤¦¤«¡¢ sysctl(2) ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÍѤ¤¤ë¡£
rmem_default
¥½¥±¥Ã¥È¤Î¼õ¿®¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ (¥Ð¥¤¥Èñ°Ì)¡£
rmem_max
SO_RCVBUF ¥½¥±¥Ã¥È¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤Æ¥æ¡¼¥¶¤¬ÀßÄê¤Ç¤­¤ë ¥½¥±¥Ã¥È¤Î¼õ¿®¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º¤ÎºÇÂçÃÍ (¥Ð¥¤¥Èñ°Ì)¡£
wmem_default
¥½¥±¥Ã¥È¤ÎÁ÷¿®¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ (¥Ð¥¤¥Èñ°Ì)¡£
wmem_max
SO_SNDBUF ¥½¥±¥Ã¥È¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤Æ¥æ¡¼¥¶¤¬ÀßÄê¤Ç¤­¤ë ¥½¥±¥Ã¥È¤ÎÁ÷¿®¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º¤ÎºÇÂçÃÍ (¥Ð¥¤¥Èñ°Ì)¡£
message_cost ¤È message_burst
¥È¡¼¥¯¥ó¡¦¥Ð¥±¥Ã¥È¡¦¥Õ¥£¥ë¥¿¡¼¤òÀßÄꤹ¤ë¡£ ¤³¤ì¤Ï³°Éô¤Î¥Í¥Ã¥È¥ï¡¼¥¯¥¤¥Ù¥ó¥È¤Ë¤è¤Ã¤Æ°ú¤­µ¯¤³¤µ¤ì¤¿ Éé²Ù¸Â³¦¤Î·Ù¹ð¥á¥Ã¥»¡¼¥¸¤ËÍѤ¤¤é¤ì¤ë¡£
netdev_max_backlog
¥°¥í¡¼¥Ð¥ë¤ÊÆþÎÏ¥­¥å¡¼¤Ë¤ª¤±¤ëºÇÂç¤Î¥Ñ¥±¥Ã¥È¿ô¡£
optmem_max
¥½¥±¥Ã¥È¤¢¤¿¤ê¤Î¡¢Êä½õ¥Ç¡¼¥¿ (ancillary data) ¤È¥æ¡¼¥¶À©¸æ¥Ç¡¼¥¿ (iovecs ¤Î¤è¤¦¤Ê¤â¤Î) ¤È¤ÎϤκÇÂçĹ¡£

ioctl

°Ê²¼¤Ë¼¨¤¹Áàºî¤Ë¤Ï ioctl(2) ¤òÍѤ¤¤Æ¥¢¥¯¥»¥¹¤Ç¤­¤ë¡£

error = ioctl(ip_socket, ioctl_type, &value_result);

SIOCGSTAMP
ºÇ¸å¤Ë¥æ¡¼¥¶¤ËÅϤµ¤ì¤¿¥Ñ¥±¥Ã¥È¤Î¼õ¿®¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò struct timeval ¤ËÆþ¤ì¤ÆÊÖ¤¹¡£ ¤³¤ì¤Ï round trip »þ´Ö¤òÀµ³Î¤Ë¬¤ê¤¿¤¤¤È¤­¤ËÊØÍø¤Ç¤¢¤ë¡£ struct timeval ¤ÎÀâÌÀ¤Ï setitimer(2) ¤ò¸«¤Æ¤Û¤·¤¤¡£ ¤³¤Î ioctl ¤Ï¡¢¥½¥±¥Ã¥È¥ª¥×¥·¥ç¥ó SO_TIMESTAMP ¤¬¥½¥±¥Ã¥È¤Ë¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Î¤ß»ÈÍѤ¹¤Ù¤­¤Ç¤¢¤ë¡£ ¤µ¤â¤Ê¤±¤ì¤Ð¡¢¤³¤Î ioctl ¤Ï SO_TIMESTAMP ¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿´Ö¤Ë¼õ¿®¤·¤¿ºÇ¸å¤Î¥Ñ¥±¥Ã¥È¤Î»þ¹ï¤òÊÖ¤¹¤«¡¢ ¤½¤Î¤è¤¦¤Ê¥Ñ¥±¥Ã¥È¤ò¼õ¿®¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¼ºÇÔ¤¹¤ë (¤Ä¤Þ¤ê¡¢ ioctl(2) ¤Ï -1 ¤òÊÖ¤·¡¢ errno ¤Ë ENOENT ¤ò¥»¥Ã¥È¤¹¤ë)¡£
SIOCSPGRP
ÈóƱ´ü I/O Áàºî¤Î½ªÎ»»þ¤ä¶ÛµÞ¥Ç¡¼¥¿¤Î¼õ¿®»þ¤Ë SIGIO ¤ä SIGURG ¥·¥°¥Ê¥ë·²¤òÁ÷¤ë¥×¥í¥»¥¹¤ä¥×¥í¥»¥¹¥°¥ë¡¼¥×¤òÀßÄꤹ¤ë¡£ °ú¤­¿ô¤Ï pid_t ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£ °ú¤­¿ô¤¬Àµ¤À¤È¡¢¤½¤Î¥×¥í¥»¥¹¤Ë¥·¥°¥Ê¥ë¤¬Á÷¤é¤ì¤ë¡£Éé¤À¤È¡¢ °ú¤­¿ô¤ÎÀäÂÐÃͤò ID ¤Ë»ý¤Ä¥×¥í¥»¥¹¥°¥ë¡¼¥×¤Ë¥·¥°¥Ê¥ë¤¬Á÷¤é¤ì¤ë¡£ ¥·¥°¥Ê¥ë¼õ¿®Àè¤Ë¤Ï¡¢¼«Ê¬¼«¿È¤Î¥×¥í¥»¥¹ / ¼«Ê¬¤Î½ê°¤¹¤ë¥×¥í¥»¥¹¥°¥ë¡¼¥× ¤·¤«»ØÄê¤Ç¤­¤Ê¤¤¡£Ã¢¤·¡¢ CAP_KILL ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤ò»ý¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢µÚ¤Ó¼Â¸ú¥æ¡¼¥¶ ID ¤¬ 0 ¤Î¥×¥í¥»¥¹¤Î¾ì¹ç¤Ï ¤³¤Î¸Â¤ê¤Ç¤Ï¤Ê¤¤¡£
FIOASYNC
O_ASYNC ¥Õ¥é¥°¤òÊѹ¹¤·¡¢¥½¥±¥Ã¥È¤ÎÈóƱ´ü (asynchronous) I/O ¥â¡¼¥É¤ò Í­¸ú/̵¸ú¤Ë¤¹¤ë¡£ÈóƱ´ü I/O ¥â¡¼¥É¤Ç¤Ï¡¢ ¿·¤·¤¤ I/O ¥¤¥Ù¥ó¥È¤¬µ¯¤­¤¿¤È¤­¤Ë¡¢ SIGIO ¥·¥°¥Ê¥ë¤ä F_SETSIG ¤ÇÀßÄꤵ¤ì¤¿¥·¥°¥Ê¥ë¡¦¥»¥Ã¥È¤¬È¯¹Ô¤µ¤ì¤ë¡£
°ú¤­¿ô¤Ï¥Ö¡¼¥ëÀ°¿ô¤Î¥Õ¥é¥°¤Ç¤¢¤ë¡£
SIOCGPGRP
SIGIO ¤ä SIGURG ¤ò¼õ¿®¤·¤¿¥«¥ì¥ó¥È¥×¥í¥»¥¹¡¦¥×¥í¥»¥¹¥°¥ë¡¼¥×¤ò¼èÆÀ¤¹¤ë¡£ ¤Ê¤¤¾ì¹ç¤Ï 0 ¤¬Ê֤롣

Í­¸ú¤Ê fcntl(2) Áàºî:

FIOGETOWN
SIOCGPGRP ioctl(2) ¤ÈƱ¤¸¡£
FIOSETOWN
SIOCSPGRP ioctl(2) ¤ÈƱ¤¸¡£

¥Ð¡¼¥¸¥ç¥ó

SO_BINDTODEVICE ¤Ï Linux 2.0.30 ¤ÇƳÆþ¤µ¤ì¤¿¡£ SO_PASSCRED ¤Ï Linux 2.2 ¤ÇÅо줷¤¿¡£ sysctl ¤â Linux 2.2 ¤ÇÅо줷¤¿¡£ SO_RCVTIMEO ¤È SO_SNDTIMEO ¤Ï Linux 2.3.41 °Ê¹ß¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£ ¤½¤ì°ÊÁ°¤Ï¡¢¥¿¥¤¥à¥¢¥¦¥È¤Ï¥×¥í¥È¥³¥ë¸ÇÍ­¤Î¸ÇÄê¤ÎÀßÄêÃͤǡ¢ Æɤ߽ñ¤­¤ò¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤«¤Ã¤¿¡£

Ãí°Õ

Linux ¤Ï¡¢Á÷¼õ¿®¥Ð¥Ã¥Õ¥¡¤ÎȾʬ¤òÆâÉô¤Î¥«¡¼¥Í¥ë¹½Â¤ÂΤÇÍѤ¤¤ë¤È²¾Äꤷ¤Æ¤¤¤ë¡£ ¤·¤¿¤¬¤Ã¤Æ sysctl ¤Ï¥Í¥Ã¥È¤Î²óÀþ¾å¤Ç¤ÎÂ礭¤µ¤Î 2 Çܤˤʤ롣

Linux ¤Ç¤Ï¡¢SO_REUSEADDR ¥ª¥×¥·¥ç¥ó¤Ç¥Ý¡¼¥È¤ÎºÆÍøÍѤ¬µö²Ä¤µ¤ì¤ë¤Î¤Ï¡¢ ¤½¤Î¥Ý¡¼¥È¤ËÂФ·¤Æ bind(2) ¤òÁ°¤Ë¼Â¹Ô¤·¤¿¥×¥í¥°¥é¥à¤È¤½¤Î¥Ý¡¼¥È¤òºÆÍøÍÑ ¤·¤è¤¦¤È¤¹¤ë¥×¥í¥°¥é¥à¤ÎξÊý¤Ç SO_REUSEADDR ¤¬¥»¥Ã¥È¤µ¤ì¤¿¾ì¹ç¤Î¤ß¤Ç¤¢¤ë¡£ ¤³¤ÎÆ°ºî¤Ï (FreeBSD ¤Ê¤É¤Î) ¤¤¤¯¤Ä¤«¤Î¼ÂÁõ¤È¤Ï°Û¤Ê¤ë¡£¤³¤ì¤é¤Ç¤Ï¡¢ ¸å¤Ç¥Ý¡¼¥È¤òºÆÍøÍѤ·¤è¤¦¤È¤¹¤ë¥×¥í¥°¥é¥à¤Ç SO_REUSEADDR ¥ª¥×¥·¥ç¥ó¤ò ¥»¥Ã¥È¤¹¤ë¤À¤±¤Ç¤è¤¤¡£ ¤¿¤¤¤Æ¤¤¤Ï¤³¤Î°ã¤¤¤Ï¸«¤¨¤Ê¤¤¡£¤Ê¤¼¤Ê¤é¡¢Î㤨¤Ð¥µ¡¼¥Ð¥×¥í¥°¥é¥à¤Ï ¾ï¤Ë¤³¤Î¥ª¥×¥·¥ç¥ó¤ò¥»¥Ã¥È¤¹¤ë¤è¤¦¤ËÀ߷פµ¤ì¤ë¤«¤é¤Ç¤¢¤ë¡£

¥Ð¥°

CONFIG_FILTER ¥½¥±¥Ã¥È¥ª¥×¥·¥ç¥ó¤Ç¤¢¤ë SO_ATTACH_FILTER ¤È SO_DETACH_FILTER ¤Ë¤Ä¤¤¤Æµ­ºÜ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£¤³¤ì¤é¤Ï libpcap ¥é¥¤¥Ö¥é¥ê¤òÄ̤·¤Æ ÍѤ¤¤ëÊý¤¬Îɤ¤¡£

´ØÏ¢¹àÌÜ

getsockopt(2), setsockopt(2), socket(2), capabilities(7), ddp(7), ip(7), packet(7)