- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
int main()
{
server::CServer();
return 0;
}
class CServer {
public:
CServer()
{
SOCKET listen_sd = socket (AF_INET, SOCK_STREAM, 0); CHK_ERR(listen_sd, "socket");
SET_NONBLOCK(listen_sd);
struct sockaddr_in sa_serv;
memset (&sa_serv, '\0', sizeof(sa_serv));
sa_serv.sin_family = AF_INET;
sa_serv.sin_addr.s_addr = INADDR_ANY;
sa_serv.sin_port = htons (1111); /* Server Port number */
int err = ::bind(listen_sd, (struct sockaddr*) &sa_serv, sizeof (sa_serv)); CHK_ERR(err, "bind");
err = listen (listen_sd, 5); CHK_ERR(err, "listen");
while(true)
{
Sleep(1);
struct sockaddr_in sa_cli;
size_t client_len = sizeof(sa_cli);
#ifdef WIN32
const SOCKET sd = accept (listen_sd, (struct sockaddr*) &sa_cli, (int *)&client_len);
#else
const SOCKET sd = accept (listen_sd, (struct sockaddr*) &sa_cli, &client_len);
#endif
Callback(sd);
}
}
};
Soul_re@ver 08.02.2014 18:27 # 0
WGH 08.02.2014 18:36 # 0
На практике, если sizeof(int) == sizeof(size_t), то код будет нормально работать, пока размер адреса не превысит, например, двух гигабайт (при 32-битном). Что маловероятно.
Если size_t шире (как на x86_64), то тут уже интереснее. На little-endian машинах работать будет, а на big-endian уже нет.
Soul_re@ver 08.02.2014 18:54 # 0
А какой смысл а) брать указатель на переменную, которая по логике не должна менятся, б) использовать знаковое значение под длину. Тут говно похоже не только в коде из топика.
+ Если делать условную компиляцию под разные платформы, то в else ветке должно быть исключительно static_assert(false, "Unsupported platform")
WGH 08.02.2014 19:03 # 0
>а на остальных системах как повезёт?
Если там окажется тип, несовместимый с size_t*, то код тупо не скомпилится. Это только на винде автор устроил лотерею жестким кастом.
А переменная на самом деле меняется. Туда записывается, сколько именно байт было использовано под адрес.
WGH 08.02.2014 19:08 # +4
Xom94ok 08.02.2014 19:13 # +2
booratihno 11.03.2021 13:07 # 0