为什么有这么多自定义数据类型,如 socklen_t、ssize_t、size_t、uint16_t?我不明白他们的真正需要。对我来说,它们只是一堆需要学习的新变量名称。
我正在阅读一本书"java networking 4th edition"和第9章关于服务器套接字,同时解释多线程服务器,其中每个客户端使用单个线程处理,它说如下:
例9-3故意不对服务器套接字接受的客户端套接字使用try-with-resources.这是因为客户端套接字从try块转义为单独的线程.如果您使用了try-with-resources,主线程会在它到达while循环结束时关闭套接字,可能在生成的线程完成使用之前.
这是例9-3
import java.net.*;
import java.io.*;
import java.util.Date;
public class MultithreadedDaytimeServer {
public final static int PORT = 13;
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(PORT)) {
while (true) {
try {
Socket connection = server.accept();
Thread task = new DaytimeThread(connection);
task.start();
} catch (IOException ex) {}
}
} catch (IOException ex) {
System.err.println("Couldn't start server");
}
}
private static class DaytimeThread extends Thread {
private Socket connection;
DaytimeThread(Socket connection) { …Run Code Online (Sandbox Code Playgroud) 我正在读一本名为The Go Programming Language的书,在第2章中有关指针的内容如下
函数返回局部变量的地址是完全安全的.例如,在下面的代码中,即使在调用返回之后,由f的这个特定调用创建的局部变量v也将保持存在,并且指针p仍将引用它:
var p = f()
func f() *int {
v := 1
return &v
}
Run Code Online (Sandbox Code Playgroud)
我完全没有得到这个,一个局部变量应该在函数执行后被销毁.是因为可能在堆上分配了v.我知道在C中,如果你使用malloc分配空间,它将不会在函数执行后被销毁,因为它在堆上.