socket網路通訊

2021-10-07 16:50:58 字數 2530 閱讀 9095

read()

/write()

recv()

/send()

//readv()

/writev()

recvmsg()

/sendmsg()

recvfrom()

/sendto()

//

#include

ssize_t read

(int fd,

void

*buf, size_t count)

; ssize_t write

(int fd,

const

void

*buf, size_t count)

;#include

#include

ssize_t send

(int sockfd,

const

void

*buf, size_t len,

int flags)

; ssize_t recv

(int sockfd,

void

*buf, size_t len,

int flags)

; ssize_t sendto

(int sockfd,

const

void

*buf, size_t len,

int flags,

const

struct sockaddr *dest_addr, socklen_t addrlen)

; ssize_t recvfrom

(int sockfd,

void

*buf, size_t len,

int flags,

struct sockaddr *src_addr, socklen_t *addrlen)

; ssize_t sendmsg

(int sockfd,

const

struct msghdr *msg,

int flags)

; ssize_t recvmsg

(int sockfd,

struct msghdr *msg,

int flags)

;

1、 程序中:

struct sigaction sa;

sa.sa_handler=handle_pipe;

sigemptyset

(&sa.sa_mask)

; sa.sa_flags=0;

sigaction

(sigpipe,

&sa,0)

;/用於忽略sigpipe訊號

struct sigaction sa; 

sa.sa_handler = sig_ign;

sa.sa_flags =0;

if((sigemptyset

(&sa.sa_mask)==-

1)||sigaction

(sig_pipe,

&sa,0)

==-1)

這種方法對於程序可以忽略sigpipe。

但是posix的執行緒,對訊號的捕獲是逐條執行緒進行的,所以引出了下面的解決方案。

2、 多執行緒中:

**應寫在main函式的開頭,建立執行緒之前。

sigset_t  signal_mask;

sigemptyset

(&signal_mask)

;sigaddset

(&signal_mask, sig_pipe);if

(pthread_sigmask

(sig_block,

&signal_mask,

null)==

-1)perror

("sig_pipe"

);

這樣就能遮蔽掉執行緒中的sig_pipe。

sigset_t signal_mask;

sigemptyset (

&signal_mask)

; sigaddset (

&signal_mask, sigpipe)

;int rc = pthread_sigmask (sig_block,

&signal_mask,

null);

if(rc !=0)

3、send引數指定msg_nosignal

int ret=

send

(client_fds[i]

, send_message, buff_size, msg_nosignal);if

(ret<=0)

send失敗則關閉該socket

Socket網路通訊

服務端的程式如下 1.建立乙個伺服器端socket,即serversocket,指定繫結的埠,並監聽此埠8888 serversocket serversocket new serversocket 8888 socket socket null 記錄客戶端的數量 int count 0 syste...

socket網路通訊《二》

socket網路通訊 本文注意基於socket來分析tcp連線建立過程。先回顧一下tcp連線建立過程 主機a執行的是tcp客戶端程式,主機b執行的是tcp伺服器程式,最初兩端tcp程序處於closed態,a主動開啟連線,對應客戶端connect函式發起連線,b被動接受連線,對應於伺服器listen函...

網路通訊及Socket

1.物理層 提供資訊傳遞的媒介,如同軸電線 2.資料鏈路層 負責建立 維持和釋放資料連線,當接收點檢測到所傳資料中有錯,則會通知傳送失敗重發一遍 對資料的識別 3.網路層 當兩個計算機之間出現若高資料鏈的時候,網路層的任務就是在若干的資料鏈路中間選擇合適的鏈路確保資料的及時傳送 選擇合適的資料鏈路,...