Какие ошибки влияют на предыдущие утверждения в C? - PullRequest
0 голосов
/ 28 февраля 2010

Извините за очень общий звучащий вопрос.

скажем

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>


#define SERVER_ADDRESS  "123.456.789.012"
#define CLIENT_ADDRESS  "123.456.789.013"

#define SERVER_TCP_PORT "1234"
#define CLIENT_TCP_PORT "1235"


int main()
{
    printf("o halo thar");


    int sockfd, new_sockfd, msg_len;
    void * got_msg = "got ur msg!";
    void * message;
    struct sockaddr_in server_address, client_address;


    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
        exit(1);
    printf("socket is opened");

    bzero((char * ) &server_address, sizeof(server_address)); 
    server_address.sin_family = AF_INET;
    server_address.sin_addr.s_addr = htonl(SERVER_ADDRESS);
    server_address.sin_port = htons(SERVER_TCP_PORT);


    if (bind(sockfd, (struct sockaddr *) &server_address, sizeof(server_address)) < 0)
        exit(1);
    printf("socket is bound");

    listen(sockfd,11);
    printf("listening");

    if (accept(sockfd, (struct sockaddr *) &client_address, sizeof(client_address)) < 0) // THE BAD LINE 
        exit(1);
    printf("accepted"); 

    int i;
    for( i = 0; i < 11; i++)
    {
        msg_len = recv(sockfd, (void *) message, 10000, 0);
        if (msg_len < 1)
            exit(1);
        printf("receiving msg");

        if (send(sockfd, (void *) got_msg, 10000, 0) < 0);
            exit(1);
        printf("sending msg");
    }

    close(sockfd);

}

должно вывести abc, если все работает правильно. конечно, мой код не. но я локализовал проблему для этой определенной строки кода, которую я называю somecode(). когда я комментирую somecode(), программа выводит ab (не c). однако, когда он не закомментирован, он ничего не печатает. так с какой проблемой я сталкиваюсь, которая затрагивает предыдущие заявления? извините за неопределенность. Мне просто интересно, как хорошо видится somecode(), но когда он работает, это влияет на выполнение кода, которое должно быть выполнено до того, как оно достигнет somecode()? Спасибо, ребята.

РЕДАКТИРОВАТЬ: somecode (), являющийся

   if (accept(sockfd, (struct sockaddr *) &client_address, sizeof(client_address)) < 0)
      exit(1);

EDIT2: извините за то, что был слишком расплывчатым. Я даже забыл описать, что происходит с программой. он ничего не печатает, и мне нужно ctrl + c, чтобы выйти из него.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2010

Не видя больше кода, ничего, что приводит к неожиданному завершению работы программы (скорее, будет уничтожено операционной системой), такое как ошибка сегментации или ввод некоторой формы структуры кода, которая не позволяет ей вернуться в поток выполнения , требуя убийства через Ctrl + C. В противном случае программа должна продолжаться без проблем.

1 голос
/ 28 февраля 2010

Что произойдет, если вы fflush(STDOUT) после каждого звонка на printf? Возможно, ваша программа умирает перед печатью всего буферизованного вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...