最近在看windows网络编程,因为看的是翻译版本,难免有错误,吐槽一下。如果你正好阅读这本书,可以避免掉进某些我曾经掉进过去的坑里面。翻译错误,很可恶,但也很难免。
因为我看的是扫描版本,先上一段图片,内容在第五章102页,讲述select模式的使用。
从整体意图来看,前面加小黑圆点的语句都是解析select某个参数的条件。再看看我圈出的四个红框,我当时就很疑惑,一个是“如果”,一个是”假如“,作者这么翻译是因为原文就是两个不同的单词,还是有别的原因?后面的“则连接就成功了”——注意“就“,这样看来是陈述一件事情,并不是描述一个条件!同样”连接尝试就会失败“也是陈述一件事情。我的迷惑在,你陈述一件事情,而且后面的”连接就会失败“是一种已经发生的呢还是未发生的呢?不得其解。而且我们可以看到,这两行字,除了我圈出来的前后两处不一样,中间的”正在对一个非阻塞连接调用进行处理“是相同的;这就奇怪了,同一种情况下,怎么会出现“则连接就成功了”和”连接尝试就会失败“两种完全相反的情况呢?
我断定,这是一个错误的翻译,起码是一个不完全正确的翻译。翻看原书,找出原文:
int select( int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set