summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2015-02-20 02:34:48 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-02-20 02:34:48 +0000
commite6e47c94c7ef562b73266a2818f1821f6f182b44 (patch)
treeaaae3a1206e04a93463ccbf799c4a96d6745107a
parent936368c6e9d683e0d7af0f38345449e2c8c3db58 (diff)
parent4cc75ff1ce527949387107d9d140fb6a69e5e1f0 (diff)
downloadandroid_external_android-clat-e6e47c94c7ef562b73266a2818f1821f6f182b44.tar.gz
android_external_android-clat-e6e47c94c7ef562b73266a2818f1821f6f182b44.tar.bz2
android_external_android-clat-e6e47c94c7ef562b73266a2818f1821f6f182b44.zip
am 4cc75ff1: am 49454814: Make the raw socket and the tun fd nonblocking.
* commit '4cc75ff1ce527949387107d9d140fb6a69e5e1f0': Make the raw socket and the tun fd nonblocking.
-rw-r--r--clatd.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/clatd.c b/clatd.c
index 94cb3b5..faeb679 100644
--- a/clatd.c
+++ b/clatd.c
@@ -198,7 +198,7 @@ void drop_root() {
* mark - the socket mark to use for the sending raw socket
*/
void open_sockets(struct tun_data *tunnel, uint32_t mark) {
- int rawsock = socket(AF_INET6, SOCK_RAW, IPPROTO_RAW);
+ int rawsock = socket(AF_INET6, SOCK_RAW | SOCK_NONBLOCK, IPPROTO_RAW);
if (rawsock < 0) {
logmsg(ANDROID_LOG_FATAL, "raw socket failed: %s", strerror(errno));
exit(1);
@@ -314,6 +314,12 @@ void configure_interface(const char *uplink_interface, const char *plat_prefix,
exit(1);
}
+ error = set_nonblocking(tunnel->fd4);
+ if (error < 0) {
+ logmsg(ANDROID_LOG_FATAL, "set_nonblocking failed: %s", strerror(errno));
+ exit(1);
+ }
+
configure_tun_ip(tunnel);
}
@@ -330,7 +336,9 @@ void read_packet(int read_fd, int write_fd, int to_ipv6) {
readlen = read(read_fd, buf, PACKETLEN);
if(readlen < 0) {
- logmsg(ANDROID_LOG_WARN,"read_packet/read error: %s", strerror(errno));
+ if (errno != EAGAIN) {
+ logmsg(ANDROID_LOG_WARN,"read_packet/read error: %s", strerror(errno));
+ }
return;
} else if(readlen == 0) {
logmsg(ANDROID_LOG_WARN,"read_packet/tun interface removed");