Linux網路程式設計之擴充套件 上

2021-10-03 14:34:12 字數 2002 閱讀 2490

將網域名稱變為ip位址。

gethostbyname();

endhostent();

1、gethostname() 獲得主機名。

2、getpeername() 獲得與套介面相連的遠端協議位址。

3、getsockname() 獲得本地套介面協議位址。

4、gethostbyname();endhostent()根據主機名取得主機資訊 。

5、gethostbyaddr() 根據主機位址取得主機資訊。

6、getprotobyname() 根據協議名取得主機協議資訊。

7、getprotobynumber() 根據協議號取得主機協議資訊。

8、getservbyname() 根據服務名取得相關服務資訊。

9、getservbyport() 根據埠號取得相關服務資訊。

1、原型

int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen)

int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)

2、引數

2.1 level指定控制套接字的層次,可以取三種值,如下圖。

a、sol_socket:通用套接字選項;

b、ipproto_ip:ip選項.;

c、ipproto_tcp:tcp選項;

2.1 optname指定控制的方式(選項的名稱),如下圖。

2.3 optval獲得或者是設定套接字選項,根據選項名稱的資料型別進行轉換。

在網路通訊中,很多操作會使得程序阻塞,比如:tcp套接字中的recv/accept/connect,udp套接字中的recvfrom。

超時檢測的必要性:

1、避免程序在沒有資料時無限制地阻塞;

2、當設定的時間到時,程序從原操作返回繼續執行。

一、設定socket的屬性 so_rcvtimeo

參考**如下:

struct timeval tv

tv.tv_sec = 5; // 設定5秒時間

tv.tv_usec = 0;

setsockopt(sockfd, sol_socket, so_rcvtimeo, &tv, sizeof(tv));// 設定接收超時

recv() / recvfrom() // 從socket讀取資料。

二、用select檢測socket是否ready

參考**如下:

struct fd_set rdfs;

struct timeval tv = ; // 設定5秒時間

fd_zero(&rdfs);

fd_set(sockfd, &rdfs);

if (select(sockfd+1, &rdfs, null, null, &tv) > 0) // socket就緒

三、設定定時器(timer), 捕捉sigalrm訊號

參考**如下:

void handler(int signo)

struct sigaction act;

sigaction(sigalrm, null, &act);

act.sa_handler = handler;

act.sa_flags &= ~sa_restart;

sigaction(sigalrm, &act, null);

alarm(5);

if (recv(,) < 0) ……

四、應用心跳檢測

方法一:資料交換雙方隔一段時間,一放傳送一點資料到對方,對方給出特定的應答。如超過設定時間還是沒有應答,這時候認為異常。

方法二:改變套接字的屬性來實現。

Linux網路程式設計之擴充套件 下

一 單播 前面介紹的資料報傳送方式只有乙個接受方,稱為單播。二 廣播 同時發給區域網中的所有主機,稱為廣播。只有使用者資料報 使用udp協議 套接字才能廣播。三 廣播位址 1 以192.168.1.0 255.255.255.0 網段為例,最大的主機位址192.168.1.255代表該網段的廣播位址...

Linux網路程式設計之廣播

1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...

Linux網路程式設計之廣播

1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...