lib/socket: use less callbacks and prefer NativeString in the native layer