getsockname()

getsockname()

getsockname()函式用於獲取一個套接字的名字。它用於一個已捆綁或已連線套接字s,本地地址將被返回。本調用特別適用於如下情況:未調用bind()就調用了connect(),這時唯有getsockname()調用可以獲知系統內定的本地地址。在返回時,namelen參數包含了名字的實際位元組數。

基本介紹

  • 中文名:getsockname()
  • s:標識一個已捆綁套接口的描述字。
  • name::接收套接口的地址(名字)。
  • namelen::名字緩衝區長度。
簡述,注釋,返回值,錯誤代碼,參見:,

簡述

獲取一個套接口的本地名字。
#include <winsock.h>
int PASCAL FAR getsockname( SOCKET s, struct sockaddr FAR* name,
int FAR* namelen);
s:標識一個已捆綁套接口的描述字。
name:接收套接口的地址(名字)。
namelen:名字緩衝區長度。

注釋

若一個套接字與INADDR_ANY捆綁,也就是說該套接字可以用任意主機的地址,此時除非調用connect()或accept()來連線,否則getsockname()將不會返回主機IP位址的任何信息。除非套接字被連線,WINDOWS套接字應用程式不應假設IP位址會從INADDR_ANY變成其他地址。這是因為對於多個主機環境下,除非套接字被連線,否則該套接字所用的IP位址是不可知的。

返回值

若無錯誤發生,getsockname()返回0。否則的話,返回SOCKET_ERROR錯誤,應用程式可通過WSAGetLastError()獲取相應錯誤代碼。

錯誤代碼

WSANOTINITIALISED:在使用此API之前應首先成功地調用WSAStartup()。
WSAENETDOWN:WINDOWS套接口實現檢測到網路子系統失效。
WSAEFAULT:namelen參數不夠大。
WSAEINPROGRESS:一個阻塞的WINDOWS套接口調用正在運行中。
WSAENOTSOCK:描述字不是一個套接口。
WSAEINVAL:套接口未用bind()捆綁。

參見:

相關詞條

熱門詞條

聯絡我們