Linux Socket學習--為套接口綁定地址


   當我們使用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(此處代碼稍后添加)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM