9.2. bind()
函式原型
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);說明
傳回值
範例
參考
Last updated
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);Last updated
// 用現代化的 getaddrinfo() 方式:
struct addrinfo hints, *res;
int sockfd;
// 首先,用 getaddrinfo() 載入位址結構資料:
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // 使用 IPv4 或 IPv6,兩者皆可
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE; // 幫我填上我的 IP
getaddrinfo(NULL, "3490", &hints, &res);
// 建立 socket:
//(這邊是簡化版,照理你應該要查看 "res" 鏈結串列的每個成員,並進行錯誤檢查!)
sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
// 將 sockfd 綁定(bind)到我們傳遞給 getaddrinfo() 的那個 port:
bind(sockfd, res->ai_addr, res->ai_addrlen);
// 手動封裝 struct 的範例,IPv4
struct sockaddr_in myaddr;
int s;
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(3490);
// 你可以指定一個 IP address:
inet_pton(AF_INET, "63.161.169.137", &(myaddr.sin_addr));
// 或者你可以讓系統自動選一個 IP address:
myaddr.sin_addr.s_addr = INADDR_ANY;
s = socket(PF_INET, SOCK_STREAM, 0);
bind(s, (struct sockaddr*)&myaddr, sizeof myaddr);