ACE使用經驗 獲得動態分配的監聽埠號

2021-03-31 20:24:36 字數 962 閱讀 4652

我不知道大家有沒有碰到過這樣的問題,**如下:

ace_asynch_acceptoracceptor;

ace_i***_addr addr= ace_i***_addr("hastatus");

if (acceptor.open (addr,

initial_read_size,

1) == -1)

return -1;

可是怎麼樣才能獲得監聽的埠號呢?我折騰了乙個下午,才終於解決

首先,我試著通過winsocket api直接操作來取到埠號,因為 acceptor物件提供了乙個get_handler()方法

sockaddr_in addr1; 

int addr1len=sizeof(struct sockaddr);

if(ace_os::getsockname(acceptor.get_handle(),(sockaddr *)&addr1,&addr1len)!=0)

ace_debug ((lm_debug,"port:%d /n",addr1.sin_port ));

**執行正確,埠號也出現在了控制台,可是是乙個無效的埠號,也就是說上面**獲得埠是錯誤的

在網上通過關鍵字尋找了n久,直到偶然發現ace自帶的乙個類也呼叫了getsockname sockaddr等方法和結構,才總算解決這個問題

**如下:

ace_sock_seqpack_association a=ace_sock_seqpack_association(acceptor.get_handle());

size_t addr_size=1;

a.get_local_addrs(&addr,addr_size);

ace_debug ((lm_debug,"port:%d/n",addr.get_port_number()));

這才是真正的在監聽的埠號

就差一點想放棄了,可是還是沒放棄 

動態分配的陣列使用sizeof

include include include int main int b b int malloc 5 sizeof int malloc需要呼叫memset b,0,5 sizeof int memset需要呼叫printf sizeof a d n sizeof a printf sizeo...

assign 的動態分配

1 通過變數名動態訪問變數 assign name to 2 直接訪問其他程式的變數 assign zliantest1 sbook fldate to 3 通過索引動態訪問結構成員 assign component sy index of structure to 4 通過欄位名動態地訪問結構成員...

C C 為什麼使用動態分配?

include include include why1 按需分配,不浪費記憶體 intmain int salary null int n 0 printf 請輸入僱傭人數 scanf s d n scanf s d n if n 1 二.列印 for int i 0 i delete salar...