天天看點

TCP/IP程式設計之bind函數詳解

函數原型:

BIND(2)                    Linux Programmer's Manual                   BIND(2)

NAME
       bind - bind a name to a socket

SYNOPSIS
       #include <sys/types.h>          /* See NOTES */
       #include <sys/socket.h>

       int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
           

參數說明:

sockfd是由socket函數傳回的套接字描述符,第二個、第三個參數分别是一個指向套接字位址結構的指針和結構的大小。

傳回值:

傳回:若成功則為0,若出錯則為-1(從bind函數傳回的一個常見錯誤是EADDRINUSE "Address already in use",位址已經在使用)

bind函數把一個本地協定位址賦予一個套接字。對于TCP,調用bind函數可以指定一個端口号,或指定一個IP位址,也可以兩者都指定,還可以都不指定。

IPv4的TCP僞代碼如下:

int sockfd = socket(AF_INET, SOCK_STREAM, 0); //TCP

short port = 9527; //端口
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET; //IPv4
servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //表示由核心去選擇IP位址
servaddr.sin_port = htons(port);

int res = bind(sockfd, (sockaddr *)&servaddr, sizeof(servaddr));
if (0 == res)
    printf("server bind success, 0.0.0.0:%d\n", port);
else {
    perror("bind fail");
}           

參考:《unix網絡程式設計》·卷1

繼續閱讀