獲取連接端的地址以及自己的地址

 
如果作爲服務器端的進程去獲取連上它的端地址用getpeername(int sock, struct sockaddr *name, socklen_t *namelen);
而如果想獲取服務器進程本地地址採用getsockname(int sock, struct sockaddr *name, sockelen_t *namelen);
­
要是想改變套接口sock(本質是套接口文件fd,可以把套接口當作文件fd來處理),可以採用
int fcntl(int fd, int cmd, long arg)
­
如果是想設置套接字在接受數據的時候不阻塞可以採用int setsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
­
備註1:以上兩庫函數的sock必須保持一致,並且都是由::accept(int sock, sockaddr *addr, int addrlen)返回的套接字號產生的.
備註2:在使用fcntl()函數的時候,如果是設置fd的屬性參數那麼先要獲取之前的fd屬性參數.etc.
fcntl(sock, F_SETFD, fcntl(sock, F_GETFD, 0)|FD_CLOEXEC);
備註3:etc. ::setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void*)&nodelay, sizeof(nodelay));
fd_flags = ::fcntl(sock, F_GETFL, 0);
::fcntl(sock, F_SETFL, fd_flags);
其中int nodelay=1  fd_flags; fd_flags可以與O_NONBLOCK O_NDELAY 0_FNDELY進行或運算
發佈了25 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章