У меня проблема с отправкой сообщения на сокет сервера от клиента.
Функция записи возвращает ошибку - неверный номер файла . Это означает, что у меня нет разрешения на запись в этот сокет.
Но с другого клиента я могу написать в этот сокет и сделать это успешно.
Самое интересное, что когда другой клиент подключился к серверу, мой (проблемный) клиент тоже может отправить сообщение.
код моего клиента:
SOCKET OnceCommand;
struct sockaddr_in SAddress4;
struct autoC
{
char buf[4];
short fromx;
short fromy;
short tox;
short toy;
char step;
char cycle;
};
union autocomm{
char byte[14];
struct autoC command;
} Command1, Command2;
memset(&SAddress4,0,sizeof(SAddress4));
SAddress4.sin_family = AF_INET;
SAddress4.sin_port = htons(444);
SAddress4.sin_addr.s_addr = inet_addr(RobotsIP[Robot1]);
memset(&(SAddress4.sin_zero),0,8);
if((OnceCommand = socket(AF_INET,SOCK_STREAM,0))!=SOCKET_ERROR)
{
Err(OnceCommand);
if(conn = connect(OnceCommand,(struct sockaddr *)&SAddress4,sizeof(struct sockaddr))!=SOCKET_ERROR)
{
rc = write(OnceCommand,(char*)Command1.byte,sizeof(Command1.byte));
if(rc < 0)
{
perror("Client-write() error");
rc = getsockopt(OnceCommand, SOL_SOCKET, SO_ERROR, &temp, &length);
if(rc == 0)
{
Err(OnceCommand);
perror("SO_ERROR was");
}
closesocket(OnceCommand);
}
else
{
adv_printf("Client-write() is OK\n");
adv_printf("String successfully sent lol!\n");
}
shutdown(OnceCommand,2);
closesocket(OnceCommand);
}
}
в SO_ERROR был "неверный номер файла"
Я использую сокеты lib в микроконтроллере ADAM-5510 на базе ROM-DOS.
Я пытался решить эту проблему, используя НЕБЛОКИРОВАТЬ сокеты, но select возвращает только флаг готовности к чтению.