嗨,当您运行 TCP 服务器(用 C 语言编写,使用 Berkeley Socket API)时,是否可以在实际接受连接之前读取客户端的 IP 地址/端口?
据我所知,如果您因为 IP 地址而不想与给定客户端通信,则必须先accept
连接,然后再直接连接。shutdown
伪代码(我正在寻找peek
andrefuse
方法):
int serverfd = listen(...);
for(;;) {
struct sockaddr_in clientAddr;
peek(serverfd, &clientAddr, sizeof(clientAddr));
if(isLegit(&clientAddr)) {
int clientfd = accept(serverfd, &clientAddr, sizeof(clientAddr));
handleClient(clientfd);
} else {
refuse(serverfd, &clientAddr, sizeof(clientAddr));
}
}