c - 什么样的错误会影响以前的 C 语句?

标签 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);

编辑2: 抱歉太含糊了。我什至忘记描述程序发生了什么。它没有打印出任何内容,我必须按 ctrl+c 才能退出。

最佳答案

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

关于c - 什么样的错误会影响以前的 C 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2349892/

相关文章:

有人可以向我解释给定代码中发生了什么吗?

javascript - 如何在提交前检查 SQL 数据库的输入值?

c# - Reflection.Emit 实现接口(interface)并创建数组 IL

perl - 使用eval加载模块

java - 从 java 运行一个 .sh 脚本

java - n 个数字排成一个圆圈。我们需要找到连续 nos 的最大总和

c - 如何在STM板上的端口D6(PE_9)上获取PWM信号?

c - 在c程序中请求int时输入char时如何防止崩溃

c++ - 如果不在内存中,表达式和常量存储在哪里?

Java:何时创建*任何*类的监听器?