程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> udp-Linux下socket通信函數原型玄機?(UDP)

udp-Linux下socket通信函數原型玄機?(UDP)

編輯:編程綜合問答
Linux下socket通信函數原型玄機?(UDP)

編寫UDP通訊的程序時發現:
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);
兩個相關的函數,一收一發,為毛線最後一個參數同為sockaddr的socklen_t類型,一個要傳遞變量,一個要傳遞變量指針進去?為何不統一呢?其中有何玄機?

最佳回答:


對於這個問題,我們先要弄清楚何時傳遞變量值,何時傳遞變量的指針?
因為傳遞變量值時,作為實參傳遞到函數裡,無論函數如何改變形參的值,實參的值是不變的;如果傳遞的是指針,函數內對形參的操作即對實參的操作。
對於sendto函數,因為是發送數據給dest_addr,所以我們要告訴sendto函數,這個地址結構體的長度,他才能計算地址,發送出去。
而對於recvfrom函數,因為是要接收src_addr的數據,所以當接收完畢以後,這個函數需要告訴我們所接收的數據的對方地址信息src_addr和地址長度信息addrlen,那肯定是要改變addrlen的值了,所以要用指針,把結構體長度存到addrlen指針所指向的內存裡。然後返回。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved