0
我正在寫一個基於下面列出的示例的小型tcp服務器,從here。套接字只接受特定地址?
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MY_SOCK_PATH "/somepath"
#define LISTEN_BACKLOG 50
#define handle_error(msg) \
do { perror(msg); exit(EXIT_FAILURE); } while (0)
int
main(int argc, char *argv[])
{
int sfd, cfd;
struct sockaddr_un my_addr, peer_addr;
socklen_t peer_addr_size;
sfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (sfd == -1)
handle_error("socket");
memset(&my_addr, 0, sizeof(struct sockaddr_un));
/* Clear structure */
my_addr.sun_family = AF_UNIX;
strncpy(my_addr.sun_path, MY_SOCK_PATH,
sizeof(my_addr.sun_path) - 1);
if (bind(sfd, (struct sockaddr *) &my_addr,
sizeof(struct sockaddr_un)) == -1)
handle_error("bind");
if (listen(sfd, LISTEN_BACKLOG) == -1)
handle_error("listen");
/* Now we can accept incoming connections one
at a time using accept(2) */
peer_addr_size = sizeof(struct sockaddr_un);
cfd = accept(sfd, (struct sockaddr *) &peer_addr,
&peer_addr_size);
if (cfd == -1)
handle_error("accept");
/* Code to deal with incoming connection(s)... */
/* When no longer required, the socket pathname, MY_SOCK_PATH
should be deleted using unlink(2) or remove(3) */
}
當使用accept()
打開一個新的連接,是有可能只接受來自白名單中的IP地址連接或以某種方式拒絕被列入黑名單的IP地址?
我迄今爲止發現的唯一技術是首先接受,檢查地址,然後關閉(),如果它不是經過批准的地址。
有什麼建議嗎?
[服務器套接字 - 只接受來自白名單中的IP地址的連接]的可能重複(http://support.microsoft.com/kb/9696618/server-socket-accept-connections-only-from-ip-addresses-in - 白名單) – Nick 2013-03-21 14:10:30
使用防火牆。 – ydroneaud 2013-03-21 16:24:30