首页 文章

当tcp服务器出错时,netcat客户端不会因错误而退出

提问于
浏览
0

我想通过netcat编译一些降价帖子 . 这是 Makefile .

# Makefile

all: $(POSTS)

$(POST_DEST_DIR)/%.html: $(POST_SRC_DIR)/%.md | $(POST_DEST_DIR)
  @nc localhost 3000 < $< > $@
  @echo 'compiled $@'

.DELETE_ON_ERROR: $(POSTS)

当TCP服务器退出时出错, nc 退出而没有错误,而Node.js nc 包装器退出时出错 . 这是一个Node.js包装器脚本 .

// nc.js

var client = require('net').connect(3000);
process.stdin.pipe(client);
client.pipe(process.stdout);
client.on('error', function (err) {
  console.error(err.message);
  process.exit(1);
});

那么

# Makefile with nc.js

$(POST_DEST_DIR)/%.html: $(POST_SRC_DIR)/%.md | $(POST_DEST_DIR)
  @node nc.js < $< > $@
  @echo 'compiled $@'

TCP服务器也是用NodeJS编写的 . 我希望 nc 在TCP服务器崩溃时退出并出现错误,以便立即停止 make 进程 .

这是一个用于测试的TCP服务器 .

// tcp server for error test

require('net').createServer(function(socket) {
  process.exit(1);
}).listen(3000);

我已阅读 nc 手册页 . 但我发现做我想做的事是不可能的 . 我错过了什么吗?

1 回答

  • 1

    TCP没有任何远程服务器“崩溃”的概念 . 当打开TCP套接字的程序结束时(无论如何),操作系统将关闭套接字 .

    为了做你想做的事,你需要创建一个协议,服务器将确认你希望它执行的任何操作的完成,然后客户端将以失败退出,除非它得到应用程序层确认 .

相关问题