bind

Autres langues

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)