2015-07-01 96 views
0

我接管了多年前編寫的Windows服務的維護。 我的第一個任務是讓服務在Windows 7上運行。 WinDbg顯示服務在對GetAddressByName的調用中出錯。 (GetAddressByName返回0和服務關閉。)GetAddressByName和Windows 7

根據MSDN(https://msdn.microsoft.com/en-us/library/windows/desktop/ms738517%28v=vs.85%29.aspx),GetAddressByName不適用於Winsock的V選用。2.

請問上述表示GetAddressByName不會與Windows上工作7?(Winsock 1.x可以在Windows 7上工作嗎?) (使用函數代替GetAddressByName的任何建議?)

我正在查看是否有其他人做過此操作。

或者(Win 7上支持GetAddressByName),調試GetAddressByName調用返回0的任何建議嗎?

最好的問候, 米奇

+1

[GetAddressByName](https://msdn.microsoft.com/en-us/library/windows/desktop/ms738517.aspx)文檔中的第一句話:*「** GetAddressByName **不再可用於從Windows套接字2開始使用。請改爲使用[獨立於協議的名稱解析](https://msdn.microsoft.com/en-us/library/windows/desktop/ms740101.aspx)中詳述的功能。「* – IInspectable

回答

1

GetAddressByName()是從1.x的的WinSock遺留功能它在WinSock 2.0中被刪除。使用WinSock 2.x的應用程序應該使用getaddrinfo(),如果不是gethostbyname()(它仍然可用)。

在任何情況下,對於documentationGetAddressByName()

如果函數成功,返回值是由lpCsaddrBuffer指向寫入緩衝器CSADDR_INFO數據結構的數目。

如果函數失敗,則返回值爲SOCKET_ERROR(-1)。要獲得擴展的錯誤信息,請致電GetLastError

由於GetAddressByName()返回0,它成功,但沒有地址正在返回。確保服務代碼正在處理該事實,而不是嘗試訪問無效的緩衝區數據。