Rechercher une page de manuel
bind
Langue: ja
Version: 2004-06-23 (openSuse - 09/10/07)
Section: 2 (Appels système)
̾Á°
bind - ¥½¥±¥Ã¥È¤Ë̾Á°¤ò¤Ä¤±¤ë½ñ¼°
#include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
ÀâÌÀ
bind() ¤Ï¥½¥±¥Ã¥È sockfd ¤Ë¥¢¥É¥ì¥¹ my_addr ¤òÍ¿¤¨¤ë¡£ my_addr ¤Ï addrlen ¥Ð¥¤¥È¤ÎŤµ¤Ç¤¢¤ë¡£ ÅÁÅýŪ¤Ë¤³¤ì¤Ï ¡Ö¥½¥±¥Ã¥È¤Ë̾Á°¤ò¤Ä¤±¤ë¡× ¤È¸Æ¤Ð¤ì¤ë¡£ socket(2) ¤Ç¥½¥±¥Ã¥È¤¬ºîÀ®¤µ¤ì¤¿¤È¤¡¢ ¥½¥±¥Ã¥È¤Ï̾Á°¶õ´Ö (¥¢¥É¥ì¥¹¡¦¥Õ¥¡¥ß¥ê¡¼) ¤Ë¸ºß¤¹¤ë¤¬¡¢ ̾Á°¤Ï¤Ä¤±¤é¤ì¤Æ¤¤¤Ê¤¤¡£Ä̾ SOCK_STREAM ¥½¥±¥Ã¥È¤Ë¤è¤Ã¤ÆÀܳ¤ò¼õ¤±Æþ¤ì¤ë (accept(2) ¤ò»²¾È) Á°¤Ë bind() ¤ò»ÈÍѤ·¤Æ¥í¡¼¥«¥ë¥¢¥É¥ì¥¹¤ò³ä¤êÅö¤Æ¤ëɬÍפ¬¤¢¤ë¡£
̾Á°ÉÕ¤±¤Î¥ë¡¼¥ë¤Ï¥¢¥É¥ì¥¹¡¦¥Õ¥¡¥ß¥ê¡¼¤´¤È¤Ë°Û¤Ê¤Ã¤Æ¤¤¤ë¡£¾ÜºÙ¤Ê¾ðÊó¤Ï Âè 7 ¾Ï¤Î³Æ¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È¤¹¤ë¤³¤È¡£ AF_INET ¤Ï ip(7) ¤ò¡¢ AF_INET6 ¤Ï ipv6(7) ¤ò¡¢ AF_UNIX ¤Ï unix(7) ¤ò¡¢ AF_APPLETALK ¤Ï ddp(7) ¤ò¡¢ AF_PACKET ¤Ï packet(7) ¤ò¡¢ AF_X25 ¤Ï x25(7) ¤ò¡¢ AF_NETLINK ¤Ï netlink(7) ¤ò»²¾È¡£
my_addr °ú¤¿ô¤Ë¼ÂºÝ¤Ë¤É¤Î¤è¤¦¤Ê¹½Â¤ÂΤ¬ÅϤµ¤ì¤ë¤«¤Ï¡¢ ¥¢¥É¥ì¥¹¡¦¥Õ¥¡¥ß¥ê¡¼¤Ë°Í¸¤¹¤ë¡£ sockaddr ¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤Ê´¶¤¸¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë:
struct sockaddr { sa_family_t sa_family; char sa_data[14]; }¤³¤Î¹½Â¤ÂΤϡ¢ my_addr ¤ËÅϤµ¤ì¤ë¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤ò¥¥ã¥¹¥È¤·¡¢ ¥³¥ó¥Ñ¥¤¥é¤Î·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍÞ¤¨¤ë¤¿¤á¤À¤±¤Ë¸ºß¤¹¤ë¡£ ¶ñÂÎŪ¤Ë¤É¤Î¤è¤¦¤Ë¤¹¤ì¤Ð¤è¤¤¤Î¤«¤ò¡¢ Unix ¥É¥á¥¤¥ó (AF_UNIX) ¤Î¾ì¹ç¤ÎÎã¤È¤·¤Æ°Ê²¼¤Ë¼¨¤¹¡£
#include <sys/socket.h> #include <sys/un.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #define MY_SOCK_PATH "/somepath" int main(int argc, char *argv[]) { int sfd; struct sockaddr_un addr; sfd = socket(AF_UNIX, SOCK_STREAM, 0); if (sfd == -1) { perror("socket"); exit(EXIT_FAILURE); } memset(&addr, 0, sizeof(struct sockaddr_un)); /* Clear structure */ addr.sun_family = AF_UNIX; strncpy(addr.sun_path, MY_SOCK_PATH, sizeof(addr.sun_path) - 1); if (bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_un)) == -1) { perror("bind"); exit(EXIT_FAILURE); } ... }
ÊÖ¤êÃÍ
À®¸ù¤¹¤ë¤È 0 ¤òÊÖ¤¹¡£ ¼ºÇÔ¤¹¤ë¤È -1 ¤òÊÖ¤·¡¢ errno ¤ËŬÀÚ¤ÊÃͤòÀßÄꤹ¤ë¡£¥¨¥é¡¼
- EACCES
- ¤½¤Î¥¢¥É¥ì¥¹¤ÏÊݸ¤ì¤Æ¤¤¤Æ¡¢¤«¤Ä¥æ¡¼¥¶¡¼¤¬¥¹¡¼¥Ñ¡¼¡¦¥æ¡¼¥¶¡¼¤Ç¤Ï¤Ê¤¤¡£
- EADDRINUSE
- »ØÄꤵ¤ì¤¿¥¢¥É¥ì¥¹¤¬´û¤Ë»ÈÍÑÃæ¤Ç¤¢¤ë¡£
- EBADF
- sockfd ¤¬ÉÔÀµ¤Ê¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Ç¤¢¤ë¡£
- EINVAL
- ¥½¥±¥Ã¥È¤¬¤¹¤Ç¤Ë¥¢¥É¥ì¥¹¤Ë·ë¤Ó¤Ä¤± (bind) ¤é¤ì¤Æ¤¤¤ë¡£ ENOTSOCK sockfd ¤¬¥Õ¥¡¥¤¥ë¤ËÂФ¹¤ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Ç¡¢¥½¥±¥Ã¥È¤ËÂФ¹¤ë¤â¤Î¤Ç¤Ï¤Ê¤¤¡£
°Ê²¼¤Î¥¨¥é¡¼¤Ï UNIX¥É¥á¥¤¥ó (AF_UNIX) ¤Î¥½¥±¥Ã¥ÈÆÃͤǤ¢¤ë:
- EACCES
- ¥Ñ¥¹Ì¾¤Î¹½À®Í×ÁǤ˸¡º÷µö²Ä (search permission) ¤¬¤Ê¤¤ (path_resolution(2) ¤â»²¾È¤¹¤ë¤³¤È)¡£
- EADDRNOTAVAIL
- ¸ºß¤·¤Ê¤¤¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤¬Í׵ᤵ¤ì¤¿¤«¡¢Í׵ᤵ¤ì¤¿¥¢¥É¥ì¥¹¤¬ ¥í¡¼¥«¥ë¤Ç¤Ï¤Ê¤«¤Ã¤¿¡£
- EFAULT
- my_addr ¤¬¥æ¡¼¥¶¤Î¥¢¥¯¥»¥¹²Äǽ¤Ê¥¢¥É¥ì¥¹¶õ´Ö¤Î³°¤ò»Ø¤·¤Æ¤¤¤ë¡£
- EINVAL
- addrlen ¤¬ÉÔÀµ¤Ç¤¢¤ë¤«¡¢¥½¥±¥Ã¥È¤¬ AF_UNIX ¥Õ¥¡¥ß¥ê¡¼¤Ç¤Ï¤Ê¤¤¡£
- ELOOP
- my_addr ¤ò²ò·è¤¹¤ëºÝ¤ËÁø¶ø¤·¤¿¥·¥ó¥Ü¥ê¥Ã¥¯¡¦¥ê¥ó¥¯¤¬Â¿²á¤®¤ë¡£
- ENAMETOOLONG
- my_addr ¤¬Ä¹²á¤®¤ë¡£
- ENOENT
- ¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤¡£
- ENOMEM
- ¥«¡¼¥Í¥ë¤Ë¡¢ÍøÍѲÄǽ¤Ê¥á¥â¥ê¡¼¤¬½½Ê¬¤Ë¤Ê¤¤¡£
- ENOTDIR
- ¥Ñ¥¹Ì¾¤Î¹½À®Í×ÁǤ¬¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤Ê¤¤¡£
- EROFS
- ¥½¥±¥Ã¥È inode ¤¬ÆÉ¤ß¹þ¤ßÀìÍѤΥե¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Ë¤¢¤ë¡£
½àµò
SVr4, 4.4BSD, POSIX.1-2001 (bind() ´Ø¿ô¤Ï 4.2BSD ¤ÇºÇ½é¤Ë¸½¤ï¤ì¤¿)¡£Ãí°Õ
bind() ¤Î»°ÈÖÌܤΰú¤¿ô¤Ï (4.x BSD ¤ä libc4, libc5 ¤ÈƱÍͤË) ¼ÂºÝ¤Ë¤Ï int ¤Ç¤¢¤ë¡£glibc ¤Ç¤â»È¤ï¤ì¤Æ¤¤¤ë¸½ºß¤Î socklen_t ¤Ë´Ø¤·¤Æ¡¢POSIX ¤Ë¤Ï¾¯¤·º®Í𤬤¢¤ë¡£ ¾Ü¤·¤¯¤Ï accept(2) ¤ò»²¾È¤Î¤³¤È¡£¥Ð¥°
Æ©²áŪ¥×¥í¥¥· (transparent proxy) ¥ª¥×¥·¥ç¥ó¤Ë¤Ä¤¤¤Æµ½Ò¤·¤Æ¤¤¤Ê¤¤¡£´ØÏ¢¹àÌÜ
accept(2), connect(2), getsockname(2), listen(2), path_resolution(2), socket(2), getaddrinfo(3), ip(7), ipv6(7), socket(7), unix(7)Contenus ©2006-2023 Benjamin Poulain
Design ©2006-2023 Maxime Vantorre