getpeername接口部分系統返回失敗,LastError=10014

今天遇到個問題,我的系統win7系統下使用getpeername接口獲取IP可以,但是我同事的win10卻不行,接口調用返回失敗,獲取的錯誤碼爲10014.

網絡上找到一個相關的文章:

https://blog.csdn.net/readyisme/article/details/28249883


查看MSDN對應的描述(https://msdn.microsoft.com/en-us/library/ms738533(v=vs.85).aspx):

WSAEFAULT(10014):The name or the namelen parameter is not in a valid part of the user address space, or the namelen parameter is too small.

大致的意思就是緩衝區給小了。調整成如上篇文章的代碼後,接口正常可以使用。不過使用另外一個接口也能實現同樣的效果而且不會出現getpeername問題。這個接口就是getsockname。


參考代碼如下:

方法1:
        struct sockaddr_in address1[2];
	memset(&address1, 0, sizeof(address1));
	socklen_t nAddrLen1 = sizeof(address1);

 	if (::getpeername(idSocket, (struct sockaddr *)&address1, &nAddrLen1) != 0)
 	{
 		printf("getpeername failed, idSck:%u, error:%u.", idSocket, GetLastError());
		return false;
	}

方法2:       
	struct sockaddr_in address2;
	memset(&address2, 0, sizeof(address2));
	socklen_t nAddrLen2 = sizeof(address2);
	if (::getsockname(idSocket, (struct sockaddr *)&address2, &nAddrLen2) != 0)
	{
		printf("getsockname failed, idSck:%u, error:%u.", idSocket, GetLastError());
		return false;
	}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章