- Đầu tiên ta cộng các từ 16 bit trong header: Code:
Viết hàm khởi tạo các biến cho giao thức TCP: Code:
Hàm tìm kiếm 1 phiên TCP đang rỗi trong bảng TCP session table (để mở kết nối mới)
//--- ---
//Tim mot session TCP dang roi unsigned char TCPGetFreeSession(){
unsigned char i;
for(i=0; i<TCP_MAX_SESSION; i++){
if (tcpSessionTable[i].sesState == TCP_STATE_CLOSED) return i;
}
//no free closed socket fount! -> kick an TIMED_WAIT socket for(i=0; i<TCP_MAX_SESSION; i++){
if (tcpSessionTable[i].sesState == TCP_STATE_TIMED_WAIT){ TCPCloseSession(i);
return i; }
}
//no more free sockets ... return invalid val return(TCP_MAX_SESSION);
}
}
//--- ---
//Ham khoi tao mot session TCP o che do server de cho ket noi
void TCPCreateSession(unsigned int sourcePort, prog_void* appService) { unsigned char i; i = TCPGetFreeSession(); if(i >= TCP_MAX_SESSION) i = 0; //force session 0 tcpSessionTable[i].srcPort = sourcePort;
tcpSessionTable[i].sesState = TCP_STATE_LISTEN; //Current state of TCP session
tcpSessionTable[i].srcWin = 8192;//NETSTACK_BUFFERSIZE - ETH_HEADER_LEN - IP_HEADER_LEN - TCP_HEADER_LEN - 16;
tcpSessionTable[i].desWin = tcpSessionTable[i].srcWin;
tcpSessionTable[i].timeOut = TCP_TIMEOUT; //Session time out