這兩天在部署EasyDarwin開源流媒體服務器到Windows Server 2003的時候,奇怪地發現,在Windows 2003上面,mongoose的web管理端口竟然沒法訪問,但經過netstat等命令查看,端口已經在Listening狀態的;
因而通過各類代碼跟蹤調試,終於發現了問題的緣由:
在mongoose.c中:web
static void ns_add_to_set(sock_t sock, fd_set *set, sock_t *max_fd) {
//if ( (sock != INVALID_SOCKET) && (sock < FD_SETSIZE) ) {
if ( sock != INVALID_SOCKET ) {
FD_SET(sock, set);
if (*max_fd == INVALID_SOCKET || sock > *max_fd) {
*max_fd = sock;
}
}
}
通常系統內都定義FD_SETSIZE爲1024,在Windows Server 200八、win7中,sock值都會低於1024,可是在Windows Server 2003中,sock描述竟然大於1024,致使mongoose對鏈接不進行select accept處理;
咱們修改爲:if ( sock != INVALID_SOCKET ) 判斷就能夠了;
EasyDarwin能夠在Windows Server 2003正常工做了:
bash
郵件:support@easydarwin.org服務器
WEB:www.EasyDarwin.orgmarkdown