The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Зависание listen"
Отправлено rad87, 26-Сен-05 22:41 
Помогите пожалуйста!!!!!!!!!
Проблема такая! При запуске откомпелированной программы она зависает на listen(sServerListen,2)
Что делать я не знаю

#include<sys/socket.h>
#include <sys/types.h>
#include<string.h>
#include<netinet/in.h>
#include<netdb.h>
#include<memory.h>
#include<stdio.h>
#include<curses.h>
#include <arpa/inet.h>
#include<pthread.h>
#include<unistd.h>

pthread_t p_thread;
pthread_attr_t attr;

void * ClientThread(void *data)
{
int sock=(int)data;
char szSendBuff[1024],szRecvBuff[1024];
int ret;
printf(" Поток был успешно создан\n");
while(1)
    {
    ret=recv(sock,szRecvBuff,1024,0);
    if (ret=0) break;
    else if (ret == -1) {printf("Ошибка при получении данных в потоке\n"); break;}
    printf(szRecvBuff,"\n");
    strcpy(szSendBuff,szRecvBuff);
    if (ret=send(sock,szSendBuff,sizeof(szSendBuff),0)==-1) break;
    }
    }

int main ()
    {
    int sServerListen,sClient;
    int sock,iSize;
    struct sockaddr_in localaddr,clientaddr;
    sServerListen=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
    if (sServerListen==-1)
    {
    printf("\Ошибка в создании соккета\n");
    return(1);
    }
    localaddr.sin_addr.s_addr=htonl(INADDR_ANY);
    localaddr.sin_family=AF_INET;
    localaddr.sin_port=htons(3010);
    if (bind(sServerListen,(struct sockaddr*)&localaddr,sizeof(localaddr))==-1)
    {    
    close(sServerListen);
    printf("Ошибка при привязке соккета к локальному адресу\n");
    return(1);
    }
    printf("\nПривязка к локальному адресу произошла успешно\n");
    if (listen(sServerListen,2)==-1) // ВОТ СДЕСЬ ОН И ЗАВИСАЕТ
        {
    close(sServerListen);
    printf("ошибка при прослушивание соккета\n");
        return(1);
        }
    printf("прослушивание порта началось");
    while (1)
    {
        iSize=sizeof(clientaddr);
    printf("цикл");
        if (sClient=accept(sServerListen,(struct sockaddr *) &clientaddr,(socklen_t *)&iSize)==-1)
            {
            close(sServerListen);
        printf("Ошибка при создантт дочернего сокета\n");
        return(1);
        }
    else printf("дочерний процесс должен создаться");
        }
    void *s;
    s=&sClient;
    pthread_create(&p_thread,NULL,ClientThread,s);
    close(sServerListen);
    return 0;
    }


Задача программы принять сигнал,отобразить его на экране и отправить обратно

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.

На сайте действует частичное премодерирование - после публикации некоторые сообщения от анонимов могут автоматически скрываться ботом. После проверки модератором ошибочно скрытые сообщения раскрываются. Для ускорения раскрытия можно воспользоваться ссылкой "Сообщить модератору", указав в качестве причины обращения "скрыто по ошибке".



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру