???在ACE中,這個(gè)問(wèn)題好像比較晦澀。

???我所遇到過(guò)的問(wèn)題是在ACE_SOCK_Dgram_Bcast的第4個(gè)構(gòu)造參數(shù)reuse_addr賦值為1,但很遺憾,在Windows平臺(tái)上,就是不能使端口重用生效。使用setsockopt來(lái)強(qiáng)制服用端口,仍然無(wú)效;用ACE_SOCK_Dgram也試過(guò)了,同樣無(wú)效。ACE的代碼中如是說(shuō):

// 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,?可是我要用的只是端口重用而已。

???不過(guò)ACE_SOCK_Dgram_Mcast倒是有效,可惜,不是一個(gè)概念。

???我后來(lái)用很不爽的辦法才應(yīng)付過(guò)去,用socket函數(shù)先創(chuàng)建好SOCKET句柄后,再用ACE_SOCK_Dgram::set_handle設(shè)置。挺郁悶的,不知道有沒(méi)有好的方法能解決或解釋。