Правильно ли я понимаю, что если есть такой серверный алгоритм:
int sfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};
sockaddr_in addr = { AF_INET, htons(port), { htonl(INADDR_ANY) } };
bind(sfd, &addr, sizeof(addr));
while (working) {
sockaddr_storage peer;
socklen_t sockLen = sizeof(peer);
int fd = accept(sfd, &peer, &sockLen);
if (fd != -1) {
#define BUF_SIZE 256
char buf[BUF_SIZE];
ssize_t size = recv(fd, buf, BUF_SIZE, MSG_WAITALL);
if (size != -1) {
cout << "Got message: " << buf << endl;
}
close(fd);
}
}
close(sfd);
То клиент, чтоб отослать сообщение, должен каждый раз создавать новый сокет и писать в него? Т.е.:
void sendMessage(const std::string &message) {
int sfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in addr = { AF_INET, htons(port), { htonl(INADDR_LOOPBACK) } };
connect(sfd, &addr, sizeof(addr));
send(sfd, message.c_str(), message.size(), 0);
close(sfd);
}
P.S. В реальном коде использую getaddrinfo()
+ AF_UNSPEC
.