驗證Netmask方式很簡單,只要判斷從netmask是否為連續1即可。
bool CheckNetMask (char* pszMask)
{
bool bFoundOne = false;
unsigned long lNetMask;
if (pszMask != NULL)
{
lNetMask = inet_addr(pszMask);
if (lNetMask == INADDR_NONE)
{
if (strcmp(pszMask, "255.255.255.255") == 0)
return true;
else
return false;
}
else
{
lNetMask = ntohl(lNetMask);
unsigned long ulMask = 1;
while (ulMask != 0)
{
if (lNetMask & ulMask)
bFoundOne = true;
else if (bFoundOne)
return false;
ulMask << 1;
}
return true;
}
}
else
return false;
}
2013年8月9日 星期五
2009年11月28日 星期六
SO_REUSEADDR
當一個Socket server如果重新啟動時,在bind的過程就會出現:Address already in use的錯誤訊息,必須等待TCP TIME_WAIT state的時間(2 * MSL)才能使用這個Address。為了避免這個問題發生,我們可以透過修改socket參數來讓socket可以馬上bind之前的Address。
sock = socket(AF_INET, SOCK_STREAM, 0);
int on = 1;
int status = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&on, sizeof(on));
if (status == -1)
perror("setsockopt() error");
訂閱:
文章 (Atom)