我开始编写一个使用套接字的ActiveX控件.
使用此控件的应用程序可能也可能不使用套接字.
我的控制是否可以告诉WSAStartup是否已被调用?
如果不是,叫它.有一点测试显示,多次调用WSAStartup.
但是如果请求不同的winsock版本会怎么样?这会打破其他部分的应用程序吗?
是的,这是可能的.
这里是如何做的.
bool WinsockInitialized() { SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (s == INVALID_SOCKET && WSAGetLastError() == WSANOTINITIALISED){ return false; } closesocket(s) return true; } int main() { //... if ( !WinsockInitialized() ) // Init winsock here... // Carry on as normal. // ... }
但这并不是真的有必要.随时调用WSAStartup是非常安全的.与WSACleanup()匹配的调用结束对WSAStartup()的每个成功调用也是安全的.
例如
// socket calls here would be an error,not initialized WSAStartup(...) // socket calls here OK WSAStartup(...) // more socket calls OK WSACleanup() // socket calls OK WSACleanup() // more socket calls error,not initialized
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。