當我們使用socket函數創建一個套接口之后,這個套接口就處於無名狀態,雖然之前我們提到即使沒有地址,套接口也能使用,但是這個只限於套接口對在同一個Linux內核中,如果位於兩台不同的主機的套接口需要連接,而又沒有地址,那么就無法工作。
函數bind的作用就是為無名套接口分配地址,語法如下:
#include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, struct sockaddr* my_addr, int addrlen);
函數調用成功返回0,否則返回-1,我們可以通過查看errno的值來了解錯誤原因。
但是需要注意的是提供給bind函數的套接口當前必須處於無名狀態(也就是沒有地址),如果我們使用bind函數為一個已經有地址的套接口綁定另外一個地址的話,會出現錯誤。
下面的例子展示了如何使用bind函數。
----UNDONE(此處代碼稍后添加)
下面我們來看看geisockname()函數。
#include <sys/socket.h> int getsockname(int s, struct sockaddr* name, socklen_t* namelen);
其中s表示我們想要知道地址的那個套接口,name指向接受緩沖區的指針,namelen是指向最大長度的指針變量。這個變量給出了接受緩沖區所能夠接受的最大字節數,當接收緩沖區被寫入之后,這個值就會被更新為實際寫入的字節數。
函數調用成功返回0,否則返回-1、
下面的代碼展示了getsockname函數的使用:
----UNDONE(此處代碼稍后添加)
我們在之前了解了使用函數getsockname()可以獲得套接口本地協議地址的作用,但是有時候我們不但需要確定套接口的本地協議地址,還需要確定與本地套接口相連接的遠程套接口的協議地址,這個時候我們就可以使用函數getpeername():
#include <sys/socket.h> int getpeername(int s, struct sockaddr*name, socklen_t* namelen);
函數調用成功返回0,失敗返回-1、
下面的例子展示了一下getpeername函數的使用方法:
----UNDONE(此處代碼稍后添加)
綁定一個特定的接口地址:
為了給通信指定一個特定的接口,我們需要:
1)用socket函數生成一個套接口
2)使用函數bind將想要接受連接的接口的IP地址綁定到本地套接口。
下面的例子展示了怎么綁定一個特定的網絡套接口地址:
----UNDONE(此處代碼稍后添加)
綁定統配接口
1)使用socket函數生成套接口,2)使用bind函數將IP地址INADDR_ANY綁定到本地套接口。下面的代碼展示了這一操作:
----UNDONE(此處代碼稍后添加)
