什么样的错误会影响C中的先前语句?

时间:2010-02-28 03:04:55

标签: c runtime

对于一个非常通用的声音问题感到抱歉。

让我们说

#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 个答案:

答案 0 :(得分:2)

没有看到更多代码,导致程序意外退出(而不是被操作系统杀死)的任何事情,例如分段错误或输入某种形式的代码结构,不允许它返回到执行流程,需要通过ctrl + c杀死。否则,该程序应继续进行,没有任何问题。

答案 1 :(得分:1)

每次致电fflush(STDOUT)printf会怎样?也许你的程序在打印所有缓冲输出之前就已经死了。