連線一個沒有監聽的埠結果會怎樣
阿新 • • 發佈:2019-01-08
一句話總結:訊息可達的情況下服務端直接拋個RST過來
服務端:
#include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdio.h> using namespace std; int main() { struct sockaddr_in serAddr; int listenSock, cnntSock; listenSock = socket(AF_INET, SOCK_STREAM, 0); serAddr.sin_family = AF_INET; serAddr.sin_addr.s_addr = INADDR_ANY; serAddr.sin_port = htons(1248); bind(listenSock, (const struct sockaddr *)&serAddr, sizeof(sockaddr_in)); listen(listenSock, 10); struct sockaddr_in cliAddr; socklen_t len = sizeof(sockaddr_in); cnntSock = accept(listenSock, (struct sockaddr*)&cliAddr, &len); cout<< "IP:" <<inet_ntoa(cliAddr.sin_addr) <<", port:"<<cliAddr.sin_port<<endl; unsigned int total = 0; while(1) { getchar(); cout <<"read msg..."<<endl; char buf[6000] = {0}; int ret = recv(cnntSock, buf, sizeof(buf), 0); total += ret; cout << "msg:" <<endl; cout << buf; cout << "recv msg size:" << ret << "total size:" << total <<endl; break; } close(cnntSock); close(listenSock); return 0; }
看結果,客戶端傳送syn給服務端,服務端直接回了個RST。