История изменений
Исправление
cumvillain,
(текущая версия)
:
От этой очереди нет никакого толку потому что отправка сообщений сервером неблокирующая и нет никаких механизмов определить что очередь клиента переполнена. То есть нет возможности узнать убъёт ли соединение отправка очередного сообщения клиенту или нет.
Лолшто?
server: cannot write to socket: Resource temporarily unavailable
Развлекайся:
#include <err.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
int
main(void)
{
int ret;
int sock;
int csock;
struct sockaddr_un sa = {0};
static const char data[1024];
sa.sun_family = AF_UNIX;
snprintf(sa.sun_path, sizeof(sa.sun_path), "%s", "/tmp/uds.sock");
sock = socket(AF_UNIX, SOCK_STREAM, 0);
if (sock == -1)
err(1, "cannot open socket");
unlink(sa.sun_path);
ret = bind(sock, (const struct sockaddr *)&sa, sizeof(sa));
if (ret == -1)
err(1, "cannot bind to %s", sa.sun_path);
ret = listen(sock, 10);
if (ret == -1)
err(1, "cannot listen on %s", sa.sun_path);
csock = accept4(sock, NULL, 0, SOCK_NONBLOCK);
if (csock == -1)
err(1, "cannot accept new connection");
for (;;) {
ret = write(csock, data, sizeof(data));
if (ret == -1)
warn("cannot write to socket");
}
return 0;
}
Исправление
cumvillain,
:
От этой очереди нет никакого толку потому что отправка сообщений сервером неблокирующая и нет никаких механизмов определить что очередь клиента переполнена. То есть нет возможности узнать убъёт ли соединение отправка очередного сообщения клиенту или нет.
Лолшто?
server: cannot write to socket: Resource temporarily unavailable
Развлекайся:
#include <err.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
int
main(void)
{
int ret;
int sock;
int csock;
struct sockaddr_un sa;
static const char data[1024];
sa.sun_family = AF_UNIX;
snprintf(sa.sun_path, sizeof(sa.sun_path), "%s", "/tmp/uds.sock");
sock = socket(AF_UNIX, SOCK_STREAM, 0);
if (sock == -1)
err(1, "cannot open socket");
unlink(sa.sun_path);
ret = bind(sock, (const struct sockaddr *)&sa, sizeof(sa));
if (ret == -1)
err(1, "cannot bind to %s", sa.sun_path);
ret = listen(sock, 10);
if (ret == -1)
err(1, "cannot listen on %s", sa.sun_path);
csock = accept4(sock, NULL, 0, SOCK_NONBLOCK);
if (csock == -1)
err(1, "cannot accept new connection");
for (;;) {
ret = write(csock, data, sizeof(data));
if (ret == -1)
warn("cannot write to socket");
}
return 0;
}
Исправление
cumvillain,
:
От этой очереди нет никакого толку потому что отправка сообщений сервером неблокирующая и нет никаких механизмов определить что очередь клиента переполнена. То есть нет возможности узнать убъёт ли соединение отправка очередного сообщения клиенту или нет.
Лолшто?
server: cannot write to socket: Resource temporarily unavailable
Развлекайся:
#include <err.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
int
main(void)
{
int ret;
int sock;
int csock;
struct sockaddr_un sa;
static const char data[1024];
sa.sun_family = AF_UNIX;
snprintf(sa.sun_path, sizeof(sa.sun_path), "%s", "/tmp/uds.sock");
sock = socket(AF_UNIX, SOCK_STREAM, 0);
if (sock == -1)
err(1, "cannot open socket");
unlink(sa.sun_path);
ret = bind(sock, (const struct sockaddr *)&sa, sizeof(sa));
if (ret == -1)
err(1, "cannot bind to %s", sa.sun_path);
ret = listen(sock, 10);
if (ret == -1)
err(1, "cannot listen on %s", sa.sun_path);
csock = accept4(sock, NULL, 0, SOCK_NONBLOCK);
if (csock == -1)
err(1, "cannot accept new connection");
for (;;) {
ret = write(csock, data, sizeof(data));
if (ret == -1)
warn("cannot write to socket");
}
return 0;
}
Исправление
cumvillain,
:
От этой очереди нет никакого толку потому что отправка сообщений сервером неблокирующая и нет никаких механизмов определить что очередь клиента переполнена. То есть нет возможности узнать убъёт ли соединение отправка очередного сообщения клиенту или нет.
Лолшто?
server: cannot write to socket: Resource temporarily unavailable
Развлекайся:
#include <err.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
int
main(void)
{
int ret;
int sock;
int csock;
struct sockaddr_un sa;
static const char data[1024];
sa.sun_family = AF_UNIX;
snprintf(sa.sun_path, sizeof(sa.sun_path), "%s", "/tmp/uds.sock");
sock = socket(AF_UNIX, SOCK_STREAM, 0);
if (sock == -1)
err(1, "cannot open socket");
unlink(sa.sun_path);
ret = bind(sock, (const struct sockaddr *)&sa, sizeof(sa));
if (ret == -1)
err(1, "cannot bind to %s", sa.sun_path);
ret = listen(sock, 10);
if (ret == -1)
err(1, "cannot listen on %s", sa.sun_path);
csock = accept4(sock, NULL, 0, SOCK_NONBLOCK);
if (csock == -1)
err(1, "cannot accept new connection");
for (;;) {
ret = write(csock, data, sizeof(data));
if (ret == -1)
warn("failed to write to socket");
}
return 0;
}
Исправление
cumvillain,
:
От этой очереди нет никакого толку потому что отправка сообщений сервером неблокирующая и нет никаких механизмов определить что очередь клиента переполнена. То есть нет возможности узнать убъёт ли соединение отправка очередного сообщения клиенту или нет.
Лолшто?
server: cannot write to socket: Resource temporarily unavailable
Исходная версия
cumvillain,
:
От этой очереди нет никакого толку потому что отправка сообщений сервером неблокирующая и нет никаких механизмов определить что очередь клиента переполнена. То есть нет возможности узнать убъёт ли соединение отправка очередного сообщения клиенту или нет.
Лолшто?
server: failed to write to socket: Resource temporarily unavailable