Sockets [RESOLVIDO]

1. Sockets [RESOLVIDO]

Marcio Donizeti Piai
PIAIXX5000

(usa Red Hat)

Enviado em 27/12/2016 - 14:58h

Pessoal , boa tarde.

Tenho uma aplicação em Linux (lingugem C) que utiliza sockets para enviar strings para PCs. Utilizo a função SEND do socket para esta finalidade, e esta função retorna o numero de bytes enviado ou seja, o tamanho da string.
Se eu desconectar a rede, esperava que esta função (SEND) retornasse -1 como é o caso de outras funções de sockets.
Mesmo com a rede desconectada o retorno do SEND continua sendo o tamanho da string a ser enviada (ou tentativa de envio)

Alguem já vivenciou algo parecido?

Desde já agradeço a atenção dos Srs(as)


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 27/12/2016 - 15:40h

Antes de chegar ao send(), o socket de comunicação teve de ser criado. Dependendo de como ele seja criado (orientado datagrama, a circuito, a sequenciamento de pacotes, ou mesmo em modo não processado (raw); qual a família de endereços; e eventuais parâmetros atribuídos posteriormente, que incluem bufferização e modos tardios de sinalização de erros), pode ser completamente aceitável que uma remessa funcione mesmo sem a rede estar ligada. Aliás, dependendo do destino e da configuração da máquina, você pode achar que a rede está desligada, mas aquele destino específico pode ainda constar como atingível.

Certamente precisamos de mais detalhes para poder dar uma resposta definitiva. E você poderia começar a nos dar essas informações mostrando o código do programa.

3. Sockets

Marcio Donizeti Piai
PIAIXX5000

(usa Red Hat)

Enviado em 27/12/2016 - 16:02h

Caro Paulo1205

Obrigado pela atenção, e abaixo um breve histórico e detalhes do código.

Trabalho com desenvolvimento de sistemas semafóricos de trânsito. No campo dispomos de PCs industriais dotados de Linux,
e na Central de Controle são PCs normais com Windows. Parte da aplicação de campo envia sockets para a Central de controle.
O Linux utilizado é uma versão bem antiga. (Gentoo Linux 2.4) Bom, abaixo um resumo do código

s1 é o descritor do soquet.

if (s1 = socket(PF_INET, SOCK_STREAM, 0)) >=0) //abrir o soquet
{
sin.sin.family = PF_INET;
sin.sin.port = htons (porta1);
inet_aton (ipe, & (sin.sin.addr));
bzero (&(sin.sin_zero), 8);
tam = sizeof (struct sockaddr);
fcntl (s1, F_SETFL, O_NOMBLOCK); // socket não bloqueante

if (connect (s1, &sin , tam) >= 0) //conectou
{
if send (s1, stf, tamanho) >= 0) // enviou === aqui que não retorna -1

No codigo acima há os tratatmentos de erros.


4. Re: Sockets [RESOLVIDO]

Marcio Donizeti Piai
PIAIXX5000

(usa Red Hat)

Enviado em 27/12/2016 - 16:59h

paulo1205 escreveu:

Antes de chegar ao send(), o socket de comunicação teve de ser criado. Dependendo de como ele seja criado (orientado datagrama, a circuito, a sequenciamento de pacotes, ou mesmo em modo não processado (raw); qual a família de endereços; e eventuais parâmetros atribuídos posteriormente, que incluem bufferização e modos tardios de sinalização de erros), pode ser completamente aceitável que uma remessa funcione mesmo sem a rede estar ligada. Aliás, dependendo do destino e da configuração da máquina, você pode achar que a rede está desligada, mas aquele destino específico pode ainda constar como atingível.

Certamente precisamos de mais detalhes para poder dar uma resposta definitiva. E você poderia começar a nos dar essas informações mostrando o código do programa.


Obrigado Paulo1205


Abaixo um resumo do código:

s1 é o descritor do soquet.

if (s1 = socket(PF_INET, SOCK_STREAM, 0)) >=0) //abrir o soquet
{
sin.sin.family = PF_INET;
sin.sin.port = htons (porta1);
inet_aton (ipe, & (sin.sin.addr)); //endereço é da classe 192.168.1....
bzero (&(sin.sin_zero), 8);
tam = sizeof (struct sockaddr);
fcntl (s1, F_SETFL, O_NOMBLOCK); // socket não bloqueante

if (connect (s1, &sin , tam) >= 0) //conectou
{
if send (s1, stf, tamanho) >= 0) // enviou === aqui que não retorna -1

No codigo acima há os tratatmentos de erros.

Desde já agradeço a atenção.








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts