???在ACE中,這個問題好像比較晦澀。
???我所遇到過的問題是在ACE_SOCK_Dgram_Bcast的第4個構(gòu)造參數(shù)reuse_addr賦值為1,但很遺憾,在Windows平臺上,就是不能使端口重用生效。使用setsockopt來強(qiáng)制服用端口,仍然無效;用ACE_SOCK_Dgram也試過了,同樣無效。ACE的代碼中如是說:
// If we are using winsock2 then the SO_REUSEADDR feature is broken
// SO_REUSEADDR=1 behaves like SO_REUSEPORT=1. (SO_REUSEPORT is an
// extension to sockets on some platforms)
// We define SO_REUSEPORT here so that ACE_OS::setsockopt() can still
// allow the user to specify that a socketaddr can *always* be reused.
???????????????????????????????????????????????????????????????????????????????——"config-win32-common.h"
???在Winsock2中不支持SO_REUSEADDR,?可是我要用的只是端口重用而已。
???不過ACE_SOCK_Dgram_Mcast倒是有效,可惜,不是一個概念。
???我后來用很不爽的辦法才應(yīng)付過去,用socket函數(shù)先創(chuàng)建好SOCKET句柄后,再用ACE_SOCK_Dgram::set_handle設(shè)置。挺郁悶的,不知道有沒有好的方法能解決或解釋。
???我所遇到過的問題是在ACE_SOCK_Dgram_Bcast的第4個構(gòu)造參數(shù)reuse_addr賦值為1,但很遺憾,在Windows平臺上,就是不能使端口重用生效。使用setsockopt來強(qiáng)制服用端口,仍然無效;用ACE_SOCK_Dgram也試過了,同樣無效。ACE的代碼中如是說:
// If we are using winsock2 then the SO_REUSEADDR feature is broken
// SO_REUSEADDR=1 behaves like SO_REUSEPORT=1. (SO_REUSEPORT is an
// extension to sockets on some platforms)
// We define SO_REUSEPORT here so that ACE_OS::setsockopt() can still
// allow the user to specify that a socketaddr can *always* be reused.
???????????????????????????????????????????????????????????????????????????????——"config-win32-common.h"
???在Winsock2中不支持SO_REUSEADDR,?可是我要用的只是端口重用而已。
???不過ACE_SOCK_Dgram_Mcast倒是有效,可惜,不是一個概念。
???我后來用很不爽的辦法才應(yīng)付過去,用socket函數(shù)先創(chuàng)建好SOCKET句柄后,再用ACE_SOCK_Dgram::set_handle設(shè)置。挺郁悶的,不知道有沒有好的方法能解決或解釋。
ACE 5.5好像有些奇怪,ACE_Wrappers中有了VS.NET2005的解決方案文件。但是將以前工程文件中對MFC庫支持的設(shè)置去除了。取而代之的是
Makefile Project Creator (MPC)
這個東西我還不太會用,有熟悉的朋友不妨介紹一下,謝謝先。