將網域名稱變為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得到廣播的...