: bind_tag(tag)
, bind_sa(bind_to)
{
+ // Are we creating a UNIX socket?
+ if (bind_to.family() == AF_UNIX)
+ {
+ // Is 'replace' enabled?
+ const bool replace = tag->getBool("replace");
+ if (replace && irc::sockets::isunix(bind_to.str()))
+ unlink(bind_to.str().c_str());
+ }
+
fd = socket(bind_to.family(), SOCK_STREAM, 0);
if (this->fd == -1)
#endif
}
+ if (bind_to.family() == AF_UNIX)
+ {
+ const std::string permissionstr = tag->getString("permissions");
+ unsigned int permissions = strtoul(permissionstr.c_str(), NULL, 8);
+ if (permissions && permissions <= 07777)
+ chmod(bind_to.str().c_str(), permissions);
+ }
+
SocketEngine::SetReuse(fd);
int rv = SocketEngine::Bind(this->fd, bind_to);
if (rv >= 0)