我有C代碼監聽端口,但它正在監聽錯誤的端口。C:套接字綁定在錯誤的端口
這是在.h文件中定義:
#define PHANTASIA_PORT 2101
插座:
int the_socket, error, on=1;
/* create a socket */
errno = 0;
if ((the_socket=socket(AF_INET, SOCK_STREAM, 0)) == -1) {
sprintf(error_msg,
"[0.0.0.0:?] Socket creation failed in Do_init_server_socket: %s\n",
strerror(errno));
Do_log_error(error_msg);
exit(SOCKET_CREATE_ERROR);
}
error = setsockopt(the_socket, SOL_SOCKET, SO_REUSEADDR,
(char *) &on, sizeof(on));
這是怎麼結合:
/* set up the bind address */
bind_address.sin_family = AF_INET;
bind_address.sin_addr.s_addr = INADDR_ANY;
bind_address.sin_port = PHANTASIA_PORT;
/* bind to that socket */
error = bind(the_socket, (struct sockaddr *) &bind_address,
sizeof(bind_address));
error = listen(the_socket, SOMAXCONN);
但隨後在運行時, lsof reports:
phantasia 2400 root 4u IPv4 2024436 TCP *:13576 (LISTEN)
當我在定義改變了端口2100,它代替聽了:
phantasia 2266 root 4u IPv4 2021315 TCP *:13320 (LISTEN)
這是一些舊代碼,但沒有任何警告或編譯時錯誤。也許有些事情正在我的頭上。我有一個調試日誌,當它綁定,它報告它綁定到端口2101.
這是一個絕對可怕的疣在API中,但它永遠不會消失。 – wnoise 2010-11-11 18:42:30
@wnoise:同意100%。回過頭來,一些白癡決定在內核空間中保存一個'bswap'操作碼,這是值得污染每個用戶空間的應用程序,以便用醜陋的endian依賴項來編寫。 – 2010-11-11 18:46:18
@wnoise @R ..不同意。如果你通過網絡發送東西,你必須知道字節順序,把它從sockaddr_ *用戶中隱藏起來並不會幫助任何人。 (儘管我承認,任何人通過網絡發送一個原始的sockaddr_ *結構體或者任何原始結構體,都應該被踢出去)。 – ninjalj 2010-11-11 19:01:56