add socket functions